recorrer objects for array jquery ajax rest zepto

objects - ¿Cómo PUESTO una matriz de objetos con $.ajax(jQuery o Zepto)



jquery map (3)

Me gustaría PUBLICAR una matriz de objetos con $ .ajax en Zepto o Jquery. Ambos exhiben el mismo error extraño, pero no puedo encontrar lo que estoy haciendo mal.

Los datos se guardan en el servidor cuando se envían usando un cliente de prueba como ''RestEasy'', y puedo ver que la solicitud se destrozó en el panel de red del navegador, por lo que creo que JS es el culpable.

Si envío una matriz de objetos como propiedad de datos de un POST, no se envían correctamente.

Objeto de datos:

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

Solicitud:

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

Cuerpo de solicitud como se ve en el navegador:

"bob=undefined&jonas=undefined"

Esto puede verse más directamente utilizando el método $ .param que jQuery y Zepto usan para preparar datos POST.

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

Por lo tanto, parece que la preparación que estas bibliotecas hacen para los datos post complejos es diferente de lo que esperaba.

Veo esta respuesta, pero no quiero enviar los datos como un parámetro de consulta ya que estoy PUBLICANDO mucho contenido. ¿Cómo envío una matriz en una publicación .ajax usando jQuery?

¿Cuál es la forma correcta de enviar múltiples objetos a través de POST usando jQuery / Zepto?

El uso de $ .ajax ({... data: JSON.stringify (postData) ...}) envía contenido no triturado, pero al servidor no le gusta el formato.

Actualización: Parece que JSON.stringify envía el contenido correctamente formateado. El problema es que el lado del servidor es muy, muy específico sobre la estructura del objeto que quiere. Si agrego o elimino alguna propiedad del objeto, fallará todo el proceso en lugar de usar las propiedades que coinciden. Esto es inconveniente porque es agradable usar contenido enviado por el servidor como un modelo de vista, pero los modelos de vista se cambian. ... Sigue trabajando en la mejor solución.


Asegúrese de stringify antes de enviar. Me apoyé demasiado en las bibliotecas y pensé que codificarían correctamente en función del tipo de contenido que publicaba, pero parece que no.

Trabajos:

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

Prefiero este método a usar un complemento como $ .toJSON, aunque eso logra lo mismo.


Pruebe lo siguiente:

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


editar: Supongo que ahora está empezando a ser seguro usar el JSON.stringify() nativo JSON.stringify() , admitido por la mayoría de los navegadores (sí, incluso IE8 + si te estás preguntando).

Tan simple como:

JSON.stringify(yourData)

Debería codificar sus datos en JSON antes de enviarlos, no puede simplemente enviar un objeto como este como datos de POST.

Recomiendo usar el plugin jQuery json para hacerlo. A continuación, puede utilizar algo como esto en jQuery:

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