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.
La información se guarda en el servidor cuando se envía utilizando un cliente de prueba como 'RestEasy', y puedo ver que la solicitud se destrozó en el panel de red del navegador, así que creo que JS es el culpable.
Si envío una matriz de objetos como propiedad de datos de una POST, no se envían correctamente.
objetodatos:
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 la petición como se ve en el navegador:
"bob=undefined&jonas=undefined"
Esto se puede ver de forma más directa mediante el uso de los $ .PARAM método que jQuery y Zepto usan para preparar datos POST.
$.param(
[
{ "id":"1", "name":"bob"}
, { "id":"2", "name":"jonas"}
]
)
// Output: "bob=undefined&jonas=undefined"
Parece que la preparación que estas bibliotecas hacen para datos de publicación 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 un montón de contenido. How do I send an array in an .ajax post using jQuery?
¿Cuál es la forma correcta de enviar varios objetos a través de POST usando jQuery/Zepto?
Usando $ .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 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. ... Seguimos trabajando en la mejor solución.
¿Recibe estos datos usando PHP? En caso afirmativo, puede intentar usar [.serialize()] (http://api.jquery.com/serialize/), pero deberá agregar '[]' al final de los nombres de las variables y recibirlos como arrays –