Réponses:
En utilisant, window.location.href
il n'est pas possible d'envoyer une requête POST.
Ce que vous devez faire est de configurer une form
balise avec des champs de données, de définir l' action
attribut du formulaire sur l'URL et l' method
attribut sur POST, puis d'appeler la submit
méthode sur la form
balise.
form
, donc tout est envoyé automatiquement ensemble?
$("#myForm").submit()
. Le formulaire - qui sera invisible et utilisé uniquement pour soumettre des valeurs à partir de votre code côté client, et non une entrée utilisateur - ne sera jamais affiché ni utilisé d'une autre manière, et la page sera actualisée.
Ajoutez un formulaire à votre HTML, quelque chose comme ceci:
<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>
et utilisez JQuery pour remplir ces valeurs (bien sûr, vous pouvez également utiliser javascript pour faire quelque chose de similaire)
$("#var1").val(value1);
$("#var2").val(value2);
Puis enfin soumettre le formulaire
$("#form").submit();
côté serveur, vous devriez être en mesure d'obtenir les données que vous avez envoyées en vérifiant var1
et var2
, comment faire cela dépend de la langue côté serveur que vous utilisez.
Utilisez ce fichier: "jquery.redirect.js"
$("#btn_id").click(function(){
$.redirect(http://localhost/test/test1.php,
{
user_name: "khan",
city : "Meerut",
country : "country"
});
});
});
Comme cela a été dit dans d'autres réponses, il n'y a aucun moyen de faire une requête POST en utilisant window.location.href, pour ce faire, vous pouvez créer un formulaire et le soumettre immédiatement.
Vous pouvez utiliser cette fonction:
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'});
Réponse courte: non. window.location.href
n'est pas capable de transmettre des données POST.
Réponse un peu plus satisfaisante: vous pouvez utiliser cette fonction pour cloner toutes vos données de formulaire et les soumettre.
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);
pour chacun des trois formulaires que vous souhaitez soumettre. <input name="email">
in <form name="login">
, le nom soumis sera login_name
. nameJoiner
variable en autre chose que _
pour qu'elle n'entre pas en conflit avec votre schéma de dénomination d'entrée.submitMe.submit();
c'est aussi simple que ça
$.post({url: "som_page.php",
data: { data1: value1, data2: value2 }
).done(function( data ) {
$( "body" ).html(data);
});
});
J'ai dû résoudre ce problème pour verrouiller l'écran de mon application où je devais transmettre des données sensibles en tant qu'utilisateur et l'url où il travaillait. Ensuite, créez une fonction qui exécute ce code
done()
ensemble de fonctionswindow.location.href
Avez-vous envisagé d'utiliser simplement le stockage local / de session? -ou- Selon la complexité de ce que vous construisez; vous pouvez même utiliser indexDB.
remarque :
Local storage
et indexDB
ne sont pas sécurisés - vous voulez donc éviter de stocker des données sensibles / personnelles (c'est-à-dire noms, adresses, adresses e-mail, date de naissance, etc.) dans l'un ou l'autre de ces éléments.
Session Storage
est une option plus sécurisée pour tout ce qui est sensible, elle n'est accessible qu'à l'origine qui a défini les éléments et s'efface également dès que le navigateur / l'onglet est fermé.
IndexDB
est un peu plus [mais pas beaucoup plus] compliqué et est 30MB noSQL database
intégré à chaque navigateur (mais peut être fondamentalement illimité si l'utilisateur opte) -> la prochaine fois que vous utilisez Google docs, ouvrez DevTools -> application -> IndexDB et prendre un pic. [alerte spoiler: c'est crypté].
Se concentrer sur Local
et Session Storage
; ce sont tous les deux très simples à utiliser:
// 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 simple n'est pas votre truc -ou- peut-être que vous voulez sortir de la route et essayer une approche différente tous ensemble -> vous pouvez probablement utiliser un shared web worker
... vous savez, juste pour les coups de pied.
Vous pouvez utiliser GET au lieu de pass, mais n'utilisez pas cette méthode pour les valeurs importantes,
function passIDto(IDval){
window.location.href = "CustomerBasket.php?oridd=" + IDval ;
}
Dans le CustomerBasket.php
<?php
$value = $_GET["oridd"];
echo $value;
?>
window.location.href
fait une demande GET pour la nouvelle URL, pas POST.