如何使用$ .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 } );