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

时间:2012-06-01 21:10:07

标签: javascript jquery json

我正在尝试在Sinatra应用程序中编写基于JSON的Web API。我想POST一个JSON对象作为帖子正文(使用正确的内容类型集),但我正在努力。

在Cocoa中,我会做类似

的事情
[mutableHTTPRequest setHTTPBody:dataRepresentationOfJSONObject];

然后,设置为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) {

});

有关如何执行此操作的任何指示?我的目标是让我的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

1 个答案:

答案 0 :(得分: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) {
    }
});
除非您实现,否则

JSON.stringify将无法在旧版本的IE中使用。 http://json.org