誰かが簡単な方法でjQueryにクエリ文字列の代わりに実際のJSONを送信させる方法を説明できますか?
$.ajax({
url : url,
dataType : 'json', // I was pretty sure this would do the trick
data : data,
type : 'POST',
complete : callback // etc
});
これは実際には慎重に準備されたJSONをクエリ文字列に変換します。厄介なことの1つは、おそらくクエリ文字列の制限のため、オブジェクト内のすべてのarray: []
がarray[]: []
に変換されることです。
オブジェクトをJSONにシリアライズするには JSON.stringify
を使用し、次にサーバーがJSONを認識できるようにcontentType
を指定する必要があります。これでうまくいくはずです。
$.ajax({
url: url,
type: "POST",
data: JSON.stringify(data),
contentType: "application/json",
complete: callback
});
JSON
オブジェクトは、JavaScript 1.7/ECMAScript 5以降をサポートするブラウザでネイティブに利用可能です。従来のサポートが必要な場合は、 json2 を使用できます。
いいえ、 dataType
オプション は受信したデータを解析するためのものです。
JSONを投稿するには、 JSON.stringify
を使って自分でそれを文字列化し、processData
オプションをfalse
に設定する必要があります。
$.ajax({
url: url,
type: "POST",
data: JSON.stringify(data),
processData: false,
contentType: "application/json; charset=UTF-8",
complete: callback
});
すべてのブラウザがJSON
オブジェクトをサポートしているわけではないことに注意してください。jQueryには.parseJSON
がありますが、文字列指定子が含まれていません。別のpolyfillライブラリが必要です。
私はASP.NET MVCのような多くのアーキテクチャがcontentTypeとしてJSON.stringifyを扱うための組み込み機能を持っていることを知っていますが、私の状況は少し異なるので、多分これは将来の誰かに役立つかもしれません。私はそれが私の時間を節約しただろうことを知っています!
私のhttpリクエストは異なるサブドメイン上のIBM(AS400環境)からのCGI APIによって処理されているので、これらのリクエストはクロスオリジン、つまりjsonpです。私は実際にはJavaScriptオブジェクトを介して私のAjaxを送信します。これが私のajax POSTの例です。
var data = {USER : localProfile,
INSTANCE : "HTHACKNEY",
PAGE : $('select[name="PAGE"]').val(),
TITLE : $("input[name='TITLE']").val(),
HTML : html,
STARTDATE : $("input[name='STARTDATE']").val(),
ENDDATE : $("input[name='ENDDATE']").val(),
ARCHIVE : $("input[name='ARCHIVE']").val(),
ACTIVE : $("input[name='ACTIVE']").val(),
URGENT : $("input[name='URGENT']").val(),
AUTHLST : authStr};
//console.log(data);
$.ajax({
type: "POST",
url: "http://www.domian.com/webservicepgm?callback=?",
data: data,
dataType:'jsonp'
}).
done(function(data){
//handle data.WHATEVER
});