小编典典

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

all

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

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

当在 Java 端记录正文内容时,它实际上得到[object Object]了那么一个人如何发送真正的 JSON 数据?

有没有人有使用从 jQuery 发送请求的 Java 服务序列化请求正文中的 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'
});

阅读 53

收藏
2022-06-28

共1个答案

小编典典

实际的 JSON 请求如下所示:

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

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

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

要支持没有该JSON对象的旧浏览器,请使用json2.js将其添加进去。


目前正在发生的事情是,因为你有processData: false,它基本上是发送这个:({"command":"on"}).toString()这是[object Object]......你在你的请求中看到的。

2022-06-28