Respostas:
Usando window.location.hrefnão é possível enviar uma solicitação POST.
O que você precisa fazer é configurar uma formtag com campos de dados nela, definir o actionatributo do formulário para a URL e o methodatributo para POST, em seguida, chamar o submitmétodo na formtag.
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 var1e 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.hrefnã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. nameJoinervariá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 storagee indexDBnã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 databaseintegrado 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 Locale 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.hreffaz uma solicitação GET para a nova URL, não POST.