129 votes

passer les données postales avec window.location.href

En utilisant window.location.href, j'aimerais transmettre des données POST à la nouvelle page que j'ouvre. Est-ce possible en utilisant JavaScript et jQuery ?

12 votes

Réglage de window.location.href fait une demande GET pour la nouvelle URL, et non POST.

5voto

Down_with_opp Points 61

Avez-vous envisagé d'utiliser simplement le stockage local/session ? -Ou bien, en fonction de la complexité de ce que vous construisez, vous pourriez même utiliser IndexDB.

note :

Local storage y indexDB ne sont pas sécurisés - il faut donc éviter d'y stocker des données sensibles ou personnelles (noms, adresses, adresses électroniques, dates de naissance, etc.

Session Storage est une option plus sûre pour tout ce qui est sensible, elle n'est accessible qu'à l'origine qui a défini les éléments et s'efface dès que le navigateur/onglet est fermé.

IndexDB est un peu plus [mais pas beaucoup plus] compliqué et est une 30MB noSQL database intégré à tous les navigateurs (mais peut être illimité si l'utilisateur choisit de le faire) -> la prochaine fois que vous utiliserez Google docs, ouvrez DevTools -> application -> IndexDB et jetez-y un coup d'œil. [alerte spoiler : c'est crypté].

L'accent est mis sur Local y Session Storage Les deux sont 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 la simplicité n'est pas votre truc, ou si vous voulez faire du hors piste et essayer une approche différente tous ensemble -> vous pouvez probablement utiliser un shared web worker ... tu sais, juste pour le plaisir.

4voto

Sergio Roldan Points 59

C'est aussi simple que cela

$.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 faire un verrouillage d'écran de mon application où je devais passer des données sensibles comme l'utilisateur et l'url où il travaillait. Puis créer une fonction qui exécute ce code

1 votes

Ou dans le done() fonction définie window.location.href

0 votes

Oui @ChrisEdwards, dans mon exemple j'essaie d'utiliser le retour des données de jquery post. J'espère qu'il sera utile à quelqu'un.

2voto

Steven Spungin Points 5660

J'utilise une approche très différente à ce sujet. Je place des cookies de navigation dans le client qui expirent une seconde après que j'ai placé window.location.href .

C'est beaucoup plus sûr que d'intégrer vos paramètres dans l'URL.

Le serveur reçoit les paramètres sous forme de cookies, et le navigateur supprime les cookies juste après leur envoi.

const expires = new Date(Date.now() + 1000).toUTCString()
document.cookie = `oauth-username=user123; expires=${expires}`
window.location.href = `https:foo.com/oauth/google/link`

-4voto

user3150692 Points 106

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 fichier CustomerBasket.php

<?php
  $value = $_GET["oridd"];
  echo  $value;
?>

3 votes

C'est la méthode GET mais la question est la méthode POST.

0 votes

Kissa Mia n'a peut-être pas bien formulé sa réponse, mais elle a raison en ce qui concerne la voie GET. La question n'est pas liée à l'utilisation de la méthode POST - l'utilisateur a juste demandé s'il y avait un moyen d'utiliser la méthode GET. Données POST et l'envoyer via window.location.href. Et vous devez d'abord savoir que Window.location.href IS une requête GET. Cette réponse n'est pas fausse - il ne sera simplement pas facile de s'adapter à un grand nombre de champs de formulaire, encodés sous forme de QueryString. Cependant, le moyen le plus évident d'envoyer des données via une URL (ce que vous pouvez modifier avec window.location.href) est d'utiliser des paramètres de chaîne de requête.

0 votes

@SylonZero Vous ne pouvez pas joindre des données POST à une requête GET. Il s'agit de différents types de requêtes et les données ont un aspect différent dans une requête POST. Les parties importantes de la spécification HTTP sont assez courtes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X