2009-11-17 15 views
54

jQueryのAjaxでJSON形式のデータをサーバーに配置しようとしています。私のコードは次のようになります。jQuery - JSONをAjax経由でプッシュする方法は?

$.ajax({ 
    type: "PUT", 
    url: myURL, 
    contentType: "application/json", 
    data: {"data": "mydata"} 
}); 

しかし、サーバー側で、私の代わりに、予想されるJSONのdata=mydata文字列を、受け取ります。 Firebugは私に同じことを伝えます。

どこがエラーですか?

+0

あなたは、サーバー側では何を使用していますか? –

+0

JSONが必要なCouchdbを使用します。 –

+6

AJAX PUT *はすべての主要ブラウザで利用可能です。 HTTP PUTはそうではありません。したがって、この場合はPUTを使用するのが良い(推奨、さらには)。 –

答えて

46

私はデータがStringである必要があると思います。オブジェクトは、ここに表示されているクエリ文字列に変換されます。

JSON.stringify(obj)メソッドを使用すると、オブジェクトを文字列に変換できます。 JSONオブジェクトのコードは、https://github.com/douglascrockford/JSON-js/blob/master/json2.jsから入手できます。

代わりに、文字列としてオブジェクトを作成するために使用しているコードを渡すだけですが、これは単なる例であり、既に作成したオブジェクトをエンコードしたいと思うでしょう。

+1

これはJSONがサーバー上に必要な場合、@Juriが行くべき方法です。私はいつもjson2.jsライブラリを使用しています。 –

+3

は、jQueryがPOSTの場合と同じようにデータを文字列化するといいでしょう。 – neoneye

+1

更新リンク:https://github.com/douglascrockford/JSON-js/blob/master/json2.js – Ben

30

アプリケーションでJSONを送信する必要がある場合は、initのどこかでこれを実行してから、デフォルトの$.ajaxコールを使用して、AjaxのデフォルトではなくJSON文字列としてシリアル化しますクエリ文字列。

ここで私は、上記のJSONオブジェクトを使用します。

$.ajaxSetup({ 
    contentType : 'application/json', 
    processData : false 
}); 
$.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
    if (options.data){ 
     options.data=JSON.stringify(options.data); 
    } 
}); 
1
//url: this is a reference to the XML, where you need to define the mapping. 
//<entry key="/getEmpDetails/transEfileGenerate.app"> 
//<bean class="com.adp.ems.framework.spring.MappingItem" p:delegate-ref="efilePageDelegate" 
//p:action="passJSONObjectAndGetWebServiceOutput" /> 

//str1 is the input JSON that you need to pass... Ajax will automatically take care to get the response. 
//</entry> 

var kw = { 
    url : "getEmpDetails/transEfileGenerate.app", 
    timeout : 30000, 
    handleAs : "json", 
    sync: false, 
    putData : str1, 
    headers: { "Content-Type": "application/json"}, 
    load : function(result) { 
}, 
関連する問題