Respostas:
Usando window.location.href
não é possível enviar uma solicitação POST.
O que você precisa fazer é configurar uma form
tag com campos de dados nela, definir o action
atributo do formulário para a URL e o method
atributo para POST, em seguida, chamar o submit
método na form
tag.
form
, para que tudo seja enviado junto automaticamente?
$("#myForm").submit()
. O formulário - que será invisível e usado apenas para enviar valores de seu código do lado do cliente, não a entrada do usuário - nunca será mostrado nem usado de outra forma, e a página será atualizada.
Adicione um formulário ao seu HTML, mais ou menos assim:
<form style="display: none" action="/the/url" method="POST" id="form">
<input type="hidden" id="var1" name="var1" value=""/>
<input type="hidden" id="var2" name="var2" value=""/>
</form>
e usar JQuery para preencher esses valores (é claro que você também pode usar javascript para fazer algo semelhante)
$("#var1").val(value1);
$("#var2").val(value2);
Então, finalmente, envie o formulário
$("#form").submit();
no lado do servidor, você deve ser capaz de obter os dados enviados verificando var1
e var2
, como fazer isso depende de qual linguagem do lado do servidor você está usando.
Use este arquivo: "jquery.redirect.js"
$("#btn_id").click(function(){
$.redirect(http://localhost/test/test1.php,
{
user_name: "khan",
city : "Meerut",
country : "country"
});
});
});
Como já foi dito em outras respostas, não há como fazer um pedido POST usando window.location.href, para isso você pode criar um formulário e enviá-lo imediatamente.
Você pode usar esta função:
function postForm(path, params, method) {
method = method || 'post';
var form = document.createElement('form');
form.setAttribute('method', method);
form.setAttribute('action', path);
for (var key in params) {
if (params.hasOwnProperty(key)) {
var hiddenField = document.createElement('input');
hiddenField.setAttribute('type', 'hidden');
hiddenField.setAttribute('name', key);
hiddenField.setAttribute('value', params[key]);
form.appendChild(hiddenField);
}
}
document.body.appendChild(form);
form.submit();
}
postForm('mysite.com/form', {arg1: 'value1', arg2: 'value2'});
Resposta curta: não. window.location.href
não é capaz de transmitir dados POST.
Resposta um pouco mais satisfatória: você pode usar esta função para clonar todos os dados do formulário e enviá-los.
var submitMe = document.createElement("form");
submitMe.action = "YOUR_URL_HERE"; // Remember to change me
submitMe.method = "post";
submitMe.enctype = "multipart/form-data";
var nameJoiner = "_";
// ^ The string used to join form name and input name
// so that you can differentiate between forms when
// processing the data server-side.
submitMe.importFields = function(form){
for(k in form.elements){
if(input = form.elements[k]){
if(input.type!="submit"&&
(input.nodeName=="INPUT"
||input.nodeName=="TEXTAREA"
||input.nodeName=="BUTTON"
||input.nodeName=="SELECT")
){
var output = input.cloneNode(true);
output.name = form.name + nameJoiner + input.name;
this.appendChild(output);
}
}
}
}
submitMe.importFields(form_element);
para cada um dos três formulários que deseja enviar. <input name="email">
in <form name="login">
, o nome enviado será login_name
. nameJoiner
variável para algo diferente de _
modo que não entre em conflito com seu esquema de nomenclatura de entrada.submitMe.submit();
é tão simples quanto isso
$.post({url: "som_page.php",
data: { data1: value1, data2: value2 }
).done(function( data ) {
$( "body" ).html(data);
});
});
Tive que resolver isso para fazer um bloqueio de tela do meu aplicativo onde tinha que passar dados sigilosos como usuário e a url onde ele estava trabalhando. Em seguida, crie uma função que execute este código
done()
conjunto de funçõeswindow.location.href
Você considerou simplesmente usar armazenamento local / por sessão? -ou- Dependendo da complexidade do que você está construindo; você pode até usar indexDB.
nota :
Local storage
e indexDB
não são seguros - portanto, você deseja evitar o armazenamento de quaisquer dados confidenciais / pessoais (ou seja, nomes, endereços, endereços de e-mail, DOB, etc.) em qualquer um deles.
Session Storage
é uma opção mais segura para qualquer coisa sensível, só é acessível para a origem que define os itens e também apaga assim que o navegador / guia é fechado.
IndexDB
é um pouco mais [mas não muito mais] complicado e está 30MB noSQL database
integrado em todos os navegadores (mas pode ser basicamente ilimitado se o usuário aceitar) -> da próxima vez que usar o Google Docs, abra DevTools -> aplicativo -> IndexDB e dê uma olhada. [alerta de spoiler: está criptografado].
Focando em Local
e Session Storage
; ambos são muito simples de usar:
// To Set
sessionStorage.setItem( 'key' , 'value' );
// e.g.
sessionStorage.setItem( 'formData' , { name: "Mr Manager", company: "Bluth's Frozen Bananas", ... } );
// Get The Data
const fromData = sessionStorage.getItem( 'key' );
// e.g. (after navigating to next location)
const fromData = sessionStorage.getItem( 'formData' );
// Remove
sessionStorage.removeItem( 'key' );
// Remove _all_ saved data sessionStorage
sessionStorage.clear( );
Se simples não é o seu lugar - ou - talvez você queira sair da estrada e tentar uma abordagem diferente todos juntos -> você provavelmente pode usar um shared web worker
... sabe, apenas por diversão.
Você pode usar GET em vez de passar, mas não use este método para valores importantes,
function passIDto(IDval){
window.location.href = "CustomerBasket.php?oridd=" + IDval ;
}
No CustomerBasket.php
<?php
$value = $_GET["oridd"];
echo $value;
?>
window.location.href
faz uma solicitação GET para a nova URL, não POST.