jQuery在请求正文中发布有效json

ss2ws0br  于 2023-02-21  发布在  jQuery
关注(0)|答案(2)|浏览(176)

根据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'
});
rkue9o1l

rkue9o1l1#

实际的JSON请求如下所示:

data: '{"command":"on"}',

要发送一个实际的JSON字符串,更一般的解决方案是使用JSON.stringify()将对象序列化为JSON,如下所示:

data: JSON.stringify({ "command": "on" }),

要支持没有JSON对象的旧浏览器,请使用json2.js,它将添加该对象。
现在的情况是,由于您有processData: false,它基本上发送以下内容:({"command":"on"}).toString()[object Object] ...您在请求中看到的内容。

euoag5mw

euoag5mw2#

把他们封起来

//contentType: false,
//processData: false,

相关问题