Risposte:
Utilizzando window.location.href
non è possibile inviare una richiesta POST.
Quello che devi fare è impostare un form
tag con campi di dati in esso, impostare l' action
attributo del modulo sull'URL e l' method
attributo su POST, quindi chiamare il submit
metodo sul form
tag.
form
, quindi tutto viene inviato insieme automaticamente?
$("#myForm").submit()
. Il modulo, che sarà invisibile e utilizzato solo per inviare valori dal codice lato client, non l'input dell'utente, non verrà mai mostrato né utilizzato in altro modo e la pagina verrà aggiornata.
Aggiungi un modulo al tuo HTML, qualcosa del genere:
<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 usa JQuery per riempire questi valori (ovviamente puoi anche usare javascript per fare qualcosa di simile)
$("#var1").val(value1);
$("#var2").val(value2);
Quindi inviare finalmente il modulo
$("#form").submit();
lato server dovresti essere in grado di ottenere i dati che hai inviato controllando var1
e var2
, come farlo dipende dalla lingua lato server che stai usando.
Utilizza questo file: "jquery.redirect.js"
$("#btn_id").click(function(){
$.redirect(http://localhost/test/test1.php,
{
user_name: "khan",
city : "Meerut",
country : "country"
});
});
});
Come è stato detto in altre risposte non c'è modo di fare una richiesta POST utilizzando window.location.href, per farlo puoi creare un form ed inviarlo immediatamente.
Puoi usare questa funzione:
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'});
Risposta breve: no. window.location.href
non è in grado di trasmettere dati POST.
Risposta un po 'più soddisfacente: puoi usare questa funzione per clonare tutti i dati del tuo modulo e inviarlo.
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);
per ciascuno dei tre moduli che desideri inviare. <input name="email">
in <form name="login">
, il nome inviato sarà login_name
. nameJoiner
variabile in qualcosa di diverso da in _
modo che non sia in conflitto con lo schema di denominazione dell'input.submitMe.submit();
è così semplice
$.post({url: "som_page.php",
date: { data1: value1, data2: value2 }
).done(function( data ) {
$( "body" ).html(data);
});
});
Ho dovuto risolvere questo problema per creare un blocco dello schermo della mia applicazione in cui dovevo passare i dati sensibili come utente e l'URL su cui stava lavorando. Quindi creare una funzione che esegua questo codice
done()
funzione impostatawindow.location.href
Hai considerato semplicemente l'utilizzo di Local / Session Storage? -oppure- A seconda della complessità di ciò che stai costruendo; potresti anche usare indexDB.
nota :
Local storage
e indexDB
non sono sicuri, quindi si desidera evitare di memorizzare dati sensibili / personali (ad esempio nomi, indirizzi, indirizzi e-mail, data di nascita, ecc.) in uno di questi.
Session Storage
è un'opzione più sicura per qualsiasi cosa sensibile, è accessibile solo all'origine che ha impostato gli elementi e si cancella anche non appena il browser / scheda viene chiuso.
IndexDB
è un po 'più [ma non molto più] complicato ed è 30MB noSQL database
integrato in tutti i browser (ma può essere praticamente illimitato se l'utente sceglie) -> la prossima volta che utilizzi Google Docs, apri DevTools -> applicazione -> IndexDB e dai un'occhiata. [avviso spoiler: è crittografato].
Concentrandosi su Local
e Session Storage
; questi sono entrambi estremamente semplici da usare:
// 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 la semplicità non fa per te -o- forse vuoi andare fuori strada e provare un approccio diverso tutti insieme -> probabilmente puoi usare un shared web worker
... sai, solo per i calci.
Puoi usare GET invece di pass, ma non usare questo metodo per valori importanti,
function passIDto(IDval){
window.location.href = "CustomerBasket.php?oridd=" + IDval ;
}
Nel CustomerBasket.php
<?php
$value = $_GET["oridd"];
echo $value;
?>
window.location.href
esegue una richiesta GET per il nuovo URL, non POST.