根据jQuery Ajax docs,它在发送请求时以查询字符串的形式序列化数据,但是设置processData:false
应该允许我在主体中发送实际的JSON。不幸的是,我很难首先确定是否发生了这种情况,其次确定发送到服务器的对象是什么样子的。我所知道的是,服务器没有解析我发送的内容。
当使用http client来发布一个对象文本{someKey:'someData'}
时,它可以工作。但是当使用jQuery和data: {someKey:'someData'}
时,它失败了。不幸的是,当我在Safari中分析请求时,它说消息负载是[object Object]
...太好了...而在Firefox中,发布是空白的...
当在Java端记录主体内容时,它实际上得到[object Object]
,那么如何发送真正的JSON数据呢?
有没有人有过Java服务在请求体中序列化JSON数据的经验,其中的请求是从jQuery发送的?
顺便说一句,这里是完整的$.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'
});
2条答案
按热度按时间rkue9o1l1#
实际的JSON请求如下所示:
要发送一个实际的JSON字符串,更一般的解决方案是使用
JSON.stringify()
将对象序列化为JSON,如下所示:要支持没有
JSON
对象的旧浏览器,请使用json2.js,它将添加该对象。现在的情况是,由于您有
processData: false
,它基本上发送以下内容:({"command":"on"}).toString()
即[object Object]
...您在请求中看到的内容。euoag5mw2#
把他们封起来