Respuestas:
El uso window.location.href
no es posible enviar una solicitud POST.
Lo que tienes que hacer es configurar una form
etiqueta con campos de datos, establecer el action
atributo del formulario en la URL y el method
atributo en POST, luego llamar al submit
método en la form
etiqueta.
form
para que todo se envíe automáticamente?
$("#myForm").submit()
. El formulario, que será invisible y solo se usará para enviar valores desde el código del lado del cliente, no la entrada del usuario, nunca se mostrará ni se usará de otra manera, y la página se actualizará.
Agregue un formulario a su HTML, algo como esto:
<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>
y use JQuery para completar estos valores (por supuesto, también puede usar javascript para hacer algo similar)
$("#var1").val(value1);
$("#var2").val(value2);
Entonces finalmente envíe el formulario
$("#form").submit();
en el lado del servidor, debería poder obtener los datos que envió comprobando var1
y var2
, cómo hacerlo, depende del idioma del lado del servidor que esté utilizando.
Utilice este archivo: "jquery.redirect.js"
$("#btn_id").click(function(){
$.redirect(http://localhost/test/test1.php,
{
user_name: "khan",
city : "Meerut",
country : "country"
});
});
});
Como se dijo en otras respuestas, no hay forma de realizar una solicitud POST usando window.location.href, para hacerlo puede crear un formulario y enviarlo de inmediato.
Puede utilizar esta función:
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'});
Respuesta corta: no. window.location.href
no es capaz de pasar datos POST.
Respuesta algo más satisfactoria: puede usar esta función para clonar todos los datos de su formulario y enviarlos.
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 uno de los tres formularios que quieras enviar. <input name="email">
en <form name="login">
, el nombre será presentado login_name
. nameJoiner
variable a algo diferente _
para que no entre en conflicto con su esquema de nomenclatura de entrada.submitMe.submit();
es tan simple como esto
$.post({url: "som_page.php",
date: { data1: value1, data2: value2 }
).done(function( data ) {
$( "body" ).html(data);
});
});
Tuve que resolver esto para hacer un bloqueo de pantalla de mi aplicación donde tenía que pasar datos sensibles como usuario y la url donde estaba trabajando. Luego crea una función que ejecute este código
done()
conjunto de funcioneswindow.location.href
¿Ha considerado simplemente usar almacenamiento local / de sesión? -o bien- Dependiendo de la complejidad de lo que está creando; incluso podrías usar indexDB.
nota :
Local storage
y indexDB
no son seguras, por lo que desea evitar almacenar datos confidenciales / personales (es decir, nombres, direcciones, direcciones de correo electrónico, fecha de nacimiento, etc.) en cualquiera de estos.
Session Storage
es una opción más segura para cualquier cosa sensible, solo es accesible para el origen que configuró los elementos y también se borra tan pronto como se cierra el navegador / pestaña.
IndexDB
es un poco más [pero no mucho más] complicado y está 30MB noSQL database
integrado en todos los navegadores (pero puede ser básicamente ilimitado si el usuario acepta) -> la próxima vez que use Google docs, abra DevTools -> aplicación -> IndexDB y echa un vistazo. [alerta de spoiler: está encriptado].
Centrándose en Local
ySession Storage
; ambos son muy fáciles 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( );
Si lo simple no es lo tuyo -o- tal vez quieras salirte de la carretera y probar un enfoque diferente todos juntos -> probablemente puedas usar un shared web worker
... ya sabes, solo por diversión.
Puede usar GET en lugar de pasar, pero no use este método para valores importantes,
function passIDto(IDval){
window.location.href = "CustomerBasket.php?oridd=" + IDval ;
}
En CustomerBasket.php
<?php
$value = $_GET["oridd"];
echo $value;
?>
window.location.href
hace una solicitud GET para la nueva URL, no POST.