因此,根据jQuery Ajax文档,它在发送请求时以查询字符串的形式序列化数据,但设置processData:false应该允许我在正文中发送实际的JSON.不幸的是,我很难确定第一个,如果发生这种情况,那么第二个对象看起来是什么,它被发送到服务器.我所知道的是服务器没有解析我发送的内容.
使用http客户端发布对象文字时{someKey:'someData'},它可以工作.但是当使用jQuery时data: {someKey:'someData'},它会失败.不幸的是,当我在Safari中分析请求时,它说消息有效负载是[object Object]......很棒......而且在Firefox中帖子是空白的...
在Java端记录正文内容时,它实际上[object Object]是如何发送REAL JSON数据的?
有没有人有过在请求体中序列化JSON数据的Java服务的经验,请求是从jQuery发送的?
BTW这里是完整的$ .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'
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Sinatra应用程序中编写基于JSON的Web API.我想POST一个JSON对象作为帖子正文(具有正确的内容类型集),但我正在努力.
在Cocoa中,我会做类似的事情
[mutableHTTPRequest setHTTPBody:dataRepresentationOfJSONObject];
Run Code Online (Sandbox Code Playgroud)
然后,设置为JSON的内容类型将HTTP主体作为JSON对象发布.我试图用jquery做这个.到目前为止,我能做的最好只是将JSON对象转换为正常的样式key=value&…样式的帖子,这不是我想要的.
我的Javascript:
var data = { "user" : "me!" };
$.ajax({
type: "POST",
url: "/api/user/create",
contentType: 'application/json',
data: data,
success: function(r) {
});
Run Code Online (Sandbox Code Playgroud)
有关如何做到这一点的任何指示?我的目标是让我的Sinatra像下面这样做
post "/api/user/create" do
js = JSON.parse(request.body.read)
# do something with the js object… this works when POSTing from Cocoa
end
Run Code Online (Sandbox Code Playgroud)