Comment puis-je POST un tableau d’objects avec $ .ajax (jQuery ou Zepto)

Je voudrais POST un tableau d’objects avec $ .ajax dans Zepto ou Jquery. Les deux affichent la même erreur, mais je ne trouve pas ce que je fais mal.

Les données sont enregistrées sur le serveur lorsqu’elles sont envoyées à l’aide d’un client de test tel que «RestEasy», et je peux voir que la requête est endommagée dans le panneau net du navigateur. Je pense donc que JS est le coupable.

Si j’envoie un tableau d’objects en tant que propriété de données d’un POST, ils ne sont pas correctement envoyés.

Objet de données:

var postData = [ { "id":"1", "name":"bob"} , { "id":"2", "name":"jonas"} ] 

Demande:

 $.ajax({ url: _saveDeviceUrl , type: 'POST' , contentType: 'application/json' , dataType: 'json' , data: postData , success: _madeSave.bind(this) //, processData: false //Doesn't help }); 

Demander le corps comme vu dans le navigateur:

 "bob=undefined&jonas=undefined" 

Cela peut être vu plus directement en utilisant la méthode $ .param que jQuery et Zepto utilisent pour préparer les données POST.

 $.param( [ { "id":"1", "name":"bob"} , { "id":"2", "name":"jonas"} ] ) // Output: "bob=undefined&jonas=undefined" 

Il semble donc que la préparation de ces bibliothèques pour les données de publication complexes diffère de ce que j’attendais.

Je vois cette réponse, mais je ne veux pas envoyer les données en tant que paramètre de requête car je POST beaucoup de contenu. Comment envoyer un tableau dans une publication .ajax en utilisant jQuery?

Quelle est la bonne façon d’envoyer plusieurs objects sur POST en utilisant jQuery / Zepto?

Utiliser $ .ajax ({… données: JSON.ssortingngify (postData) …}) envoie du contenu non-mutilé, mais le serveur n’aime pas le format.

Mise à jour: JSON.ssortingngify semble envoyer du contenu correctement formaté. Le problème est que le côté serveur est très, très spécifique sur la structure de l’object qu’il veut. Si j’ajoute ou supprime des propriétés de l’object, tout le processus échouera au lieu d’utiliser les propriétés correspondantes. Cela est gênant car il est agréable d’utiliser du contenu envoyé par le serveur en tant que modèle de vue, mais les modèles de vue sont modifiés. … Toujours en train de travailler sur la meilleure solution.

Assurez-vous de ssortingngify avant l’envoi. Je me suis trop appuyé sur les bibliothèques et je pensais qu’elles encoderaient correctement en fonction du type de contenu que je publiais, mais elles ne semblent pas.

Travaux:

 $.ajax({ url: _saveAllDevicesUrl , type: 'POST' , contentType: 'application/json' , data: JSON.ssortingngify(postData) //ssortingngify is important , success: _madeSave.bind(this) }); 

Je préfère cette méthode à l’utilisation d’un plugin comme $ .toJSON, bien que cela accomplisse la même chose.

Essayez ce qui suit:

 $.ajax({ url: _saveDeviceUrl , type: 'POST' , contentType: 'application/json' , dataType: 'json' , data: {'myArray': postData} , success: _madeSave.bind(this) //, processData: false //Doesn't help }); 

edit: J’imagine que la méthode JSON.ssortingngify () , supscope par la plupart des navigateurs (oui, même IE8 + si vous vous posez) , commence à être sûre.

Aussi simple que:

 JSON.ssortingngify(yourData) 

Vous devez encoder vos données en JSON avant de les envoyer, vous ne pouvez pas simplement envoyer un object comme ceci en tant que données POST.

Je recommande d’utiliser le plugin jQuery json pour le faire. Vous pouvez alors utiliser quelque chose comme ça dans jQuery:

 $.post(_saveDeviceUrl, { data : $.toJSON(postData) }, function(response){ //Process your response here } );