使用jQuery将POST主体设置为JSON对象

jbr*_*nan 20 javascript jquery json

我正在尝试在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)

use*_*654 53

将processData参数添加到ajax请求并将其设置为false.此外,您需要对对象进行字符串化以将其转换为JSON.

var data = { "user" : "me!" };
$.ajax({
    type: "POST",
    url: "/api/user/create",
    processData: false,
    contentType: 'application/json',
    data: JSON.stringify(data),
    success: function(r) {
    }
});
Run Code Online (Sandbox Code Playgroud)

JSON.stringify除非您实现它,否则将无法在旧版本的IE中使用.http://json.org

  • 注意,processData是可选的. (3认同)