Quelqu'un peut-il expliquer de manière simple comment faire en sorte que jQuery envoie du JSON réel au lieu d'une chaîne de requête?
$.ajax({
url : url,
dataType : 'json', // I was pretty sure this would do the trick
data : data,
type : 'POST',
complete : callback // etc
});
Cela convertira en fait votre JSON soigneusement préparé en une chaîne de requête. L'une des choses ennuyeuses est que tout élément array: []
de votre objet sera converti en array[]: []
, probablement à cause des limitations de la requête.
javascript
jquery
json
query-string
Redsandro
la source
la source
dataType
n'a aucune incidence sur la manière dont les données sont envoyées. Il spécifie simplement le type de données que vous attendez d'être renvoyé par l'appel. Si vous souhaitez indiquer au serveur le type de données que vous spécifiez dans ladata
propriété, vous devez définir lacontentType
propriété de la même manière quecontentType: "application/json"
Réponses:
Vous devez d'
JSON.stringify
abord sérialiser votre objet en JSON, puis spécifier lecontentType
afin que votre serveur comprenne qu'il s'agit de JSON. Cela devrait faire l'affaire:Notez que l'
JSON
objet est disponible nativement dans les navigateurs prenant en charge JavaScript 1.7 / ECMAScript 5 ou version ultérieure. Si vous avez besoin d'un support hérité, vous pouvez utiliser json2 .la source
contentType: 'application/json'
.POST data will always be transmitted to the server using UTF-8 charset, per the W3C XMLHTTPRequest standard
$_POST
php, vous ne pouvez que voirapplication/x-www-form-urlencoded
, si vous voulez lire des données json, vous devez le fairefile_get_contents("php://input")
et peut-être alors unjson_decode()
Non, l'
dataType
option consiste à analyser les données reçues.Pour publier JSON, vous devrez le stringify vous-même via
JSON.stringify
et définir l'processData
option surfalse
.Notez que tous les navigateurs ne prennent pas en charge l'
JSON
objet, et bien que jQuery l'ait fait.parseJSON
, aucun stringifier n'est inclus; vous aurez besoin d'une autre bibliothèque polyfill.la source
processData
surfalse
n'est pas nécessaire carJSON.stringify
renvoie déjà une chaîne.encodeURIComponent
, non?Bien que je sache que de nombreuses architectures comme ASP.NET MVC ont des fonctionnalités intégrées pour gérer JSON.stringify en tant que contentType, ma situation est un peu différente, donc peut-être que cela pourrait aider quelqu'un à l'avenir. Je sais que cela m'aurait fait gagner des heures!
Étant donné que mes requêtes http sont gérées par une API CGI d'IBM (environnement AS400) sur un sous-domaine différent, ces requêtes sont d'origine croisée, d'où le jsonp. J'envoie en fait mon ajax via un ou plusieurs objets javascript. Voici un exemple de mon AJAX POST:
la source
Si vous renvoyez ceci à asp.net et que vous avez besoin des données dans request.form [], vous devrez définir le type de contenu sur "application / x-www-form-urlencoded; charset = utf-8"
Message original ici
Deuxièmement, débarrassez-vous du type de données, si vous n'attendez pas de retour, le POST attendra environ 4 minutes avant d'échouer. Voir ici
la source