因此,根据jQuery Ajax文档,它在发送请求时以查询字符串的形式序列化数据,但是设置processData:false应允许我在正文中发送实际的JSON。不幸的是,我很难首先确定是否发生这种情况,其次是将对象的外观发送给服务器。我所知道的是服务器未解析我正在发送的内容。
processData:false
使用http客户端发布对象文字时{someKey:'someData'},它可以工作。但是当将jQuery与结合使用时data: {someKey:'someData'},它将失败。不幸的是,当我在Safari中分析请求时,它说消息的有效负载是[object Object]……很好……而在Firefox中,该帖子是空白的……
{someKey:'someData'}
data: {someKey:'someData'}
[object Object]
当在Java端记录主体内容时,它实际上得到了,[object Object]因此如何发送REAL JSON数据?
有没有人有过使用Java服务从jQuery发送请求来序列化请求正文中的JSON数据的经验?
顺便说一句,这里是完整的$ .ajax请求:
$.ajax({ contentType: 'application/json', data: { "command": "on" }, dataType: 'json', success: function(data){ app.log("device control succeeded"); }, error: function(){ app.log("Device control failed"); }, processData: false, type: 'POST', url: '/devices/{device_id}/control' });
实际的JSON请求如下所示:
data: '{"command":"on"}',
发送实际JSON字符串的位置。对于更通用的解决方案,可使用JSON.stringify()将对象序列化为JSON,如下所示:
JSON.stringify()
data: JSON.stringify({ "command": "on" }),
为了支持没有该JSON对象的旧版浏览器,请使用json2.js将其添加到其中。
JSON
目前正在发生的事情是因为您拥有processData: false,基本上是在发送此消息:({"command":"on"}).toString()即[object Object]您在请求中看到的内容。
processData: false
({"command":"on"}).toString()