2012-06-01 8 views
17

私はSinatraアプリケーションでJSONベースのWeb APIを作成しようとしています。私は(適切なコンテンツタイプが設定された)ポストボディとしてJSONオブジェクトをPOSTしたいのですが、私は苦労しています。ココアでPOST本体をjQueryでJSONオブジェクトに設定

、私は、JSONオブジェクトとしてHTTPボディを投稿するだろう、

[mutableHTTPRequest setHTTPBody:dataRepresentationOfJSONObject]; 

と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 

答えて

48

ajaxリクエストにprocessDataパラメータを追加し、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

+2

注意してください。processDataはオプションです。 –

関連する問題