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

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

在Cocoa,我会做类似的事情

[mutableHTTPRequest setHTTPBody:dataRepresentationOfJSONObject]; 

然后,设置为JSON的内容类型将HTTP主体作为JSON对象发布。 我正试着用jquery做这件事。 到目前为止我能做的最好的只是获取JSON对象并将其转换为普通样式的key=value&… style post body,这不是我所追求的。

我的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 

将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 ,否则JSON.stringify将无法在旧版本的IE中使用。 http://json.org