Je dois envoyer un fichier JSON (que je peux structurer) au serveur et récupérer le fichier JSON obtenu du côté utilisateur, sans utiliser JQuery.
Si je dois utiliser un GET, comment puis-je passer le JSON en tant que paramètre? Y a-t-il un risque que ce soit trop long?
Si je devais utiliser un POST, comment définir l'équivalent d'une fonction onload
dans GET?
Ou devrais-je utiliser une méthode différente?
REMARQUE
Cette question ne concerne pas l'envoi d'un simple AJAX. Il ne devrait pas être fermé en double.
// Sending and receiving data in JSON format using POST method
//
var xhr = new XMLHttpRequest();
var url = "url";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var json = JSON.parse(xhr.responseText);
console.log(json.email + ", " + json.password);
}
};
var data = JSON.stringify({"email": "[email protected]", "password": "101010"});
xhr.send(data);
// Sending a receiving data in JSON format using GET method
//
var xhr = new XMLHttpRequest();
var url = "url?data=" + encodeURIComponent(JSON.stringify({"email": "[email protected]", "password": "101010"}));
xhr.open("GET", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var json = JSON.parse(xhr.responseText);
console.log(json.email + ", " + json.password);
}
};
xhr.send();
<?php
// Handling data in JSON format on the server-side using PHP
//
header("Content-Type: application/json");
// build a PHP variable from JSON sent using POST method
$v = json_decode(stripslashes(file_get_contents("php://input")));
// build a PHP variable from JSON sent using GET method
$v = json_decode(stripslashes($_GET["data"]));
// encode the PHP variable to JSON and send it back on client-side
echo json_encode($v);
?>
La limite de longueur d'une requête HTTP Get dépend du serveur et du client (navigateur) utilisé, de 2 Ko à 8 Ko. Le serveur doit renvoyer l'état 414 (Request-URI Too Long) si un URI est plus long que le serveur ne peut le gérer.
Note Quelqu'un a dit que je pouvais utiliser des noms d'état au lieu de valeurs d'état; en d'autres termes, je pourrais utiliser xhr.readyState === xhr.DONE
au lieu de xhr.readyState === 4
Le problème est qu'Internet Explorer utilise des noms d'état différents, il est donc préférable d'utiliser des valeurs d'état.
Utiliser la nouvelle api fetch :
const dataToSend = JSON.stringify({"email": "[email protected]", "password": "101010"});
let dataRecieved="";
fetch("",{credentials:'same-Origin',mode:'same-Origin',method:"post",body:dataToSend})
.then(resp => {
if(resp.status==200){
return resp.json()
}else{
console.log("Status: "+resp.status);
return Promise.reject("server")
}
})
.then(dataJson =>{
dataToRecieved = JSON.parse(dataJson);
})
.catch(err =>{
if(err=="server")return
console.log(err);
})