为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

GCT1015 2019-11-11 15:27:10
因此,根据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'});
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

实际的JSON请求如下所示:


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

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


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

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


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


查看完整回答
反对 回复 2019-11-11
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

确,执行此操作后没有关系,因为它已经是字符串,并且在这种情况下jQuery不会对其进行进一步处理

查看完整回答
反对 回复 2019-11-11
  • 2 回答
  • 0 关注
  • 371 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信