小编典典

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

ajax

因此,根据jQuery
Ajax文档
,它在发送请求时以查询字符串的形式序列化数据,但是设置processData:false应允许我在正文中发送实际的JSON。不幸的是,我很难首先确定是否发生这种情况,其次是将对象的外观发送给服务器。我所知道的是服务器未解析我正在发送的内容。

使用http客户端发布对象文字时{someKey:'someData'},它可以工作。但是当将jQuery与结合使用时data: {someKey:'someData'},它将失败。不幸的是,当我在Safari中分析请求时,它说消息的有效负载是[object Object]……很好……而在Firefox中,该帖子是空白的……

当在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'
});

阅读 249

收藏
2020-07-26

共1个答案

小编典典

实际的JSON请求如下所示:

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

发送实际JSON字符串的位置。对于更通用的解决方案,可使用JSON.stringify()将对象序列化为JSON,如下所示:

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

为了支持没有该JSON对象的旧版浏览器,请使用json2.js将其添加到其中。


目前正在发生的事情是因为您拥有processData: false,基本上是在发送此消息:({"command":"on"}).toString()[object Object]您在请求中看到的内容。

2020-07-26