如何使用$ .ajax(jQuery或Zepto)发布对象数组

我想用Zepto或Jquery中的$ .ajax发布一个对象数组。 两个都performance出同样的奇怪的错误,但我找不到我做错了什么。

使用像RestEasy这样的testing客户端发送的数据保存到服务器,我可以看到请求在浏览器的networking面板中被破坏,所以我相信JS是罪魁祸首。

如果我发送一个对象数组作为POST的数据属性,它们不能正确发送。

数据对象:

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

请求:

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

请求正文在浏览器中看到:

 "bob=undefined&jonas=undefined" 

通过使用jQuery和Zepto用于准备POST数据的$ .param方法,可以更直接地看到这一点。

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

所以看起来这些库对于复杂的后期数据所做的准备与我预期的不同。

我看到这个答案,但我不想发送数据作为查询参数,因为我发布了大量的内容。 如何使用jQuery在.ajax文章中发送数组?

使用jQuery / Zepto通过POST发送多个对象的正确方法是什么?

使用$ .ajax({… data:JSON.stringify(postData)…})发送非损坏的内容,但服务器不喜欢格式。

更新:看起来像JSON.stringify发送格式正确的内容。 问题在于服务器端对于它所需的对象的结构非常非常具体。 如果我添加或删除对象的任何属性,它将失败整个过程,而不是使用匹配的属性。 这是不方便的,因为使用服务器发送的内容作为视图模型是很好的,但是视图模型被改变了。 …仍在努力寻找最佳的解决scheme。

请务必在发送之前将其stringify 。 我过多地依靠图书馆,并认为他们会根据我发布的内容types正确编码,但他们似乎并没有。

作品:

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

我更喜欢这种方法来使用像$ .toJSON插件,虽然这完成相同的事情。

尝试以下操作:

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

编辑:我想现在开始是安全的使用本机JSON.stringify()方法, 大多数浏览器支持(是的,即使IE8 +,如果你想知道)。

简单如下:

 JSON.stringify(yourData) 

在发送数据之前,您应该使用JSON对数据进行编码,您不能仅将这样的对象作为POST数据发送。

我build议使用jQuery json插件来这样做。 然后你可以在jQuery中使用这样的东西:

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