183

誰かが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[]: []

4

4 に答える 4

270

JSON.stringify最初にオブジェクトをJSONにシリアル化するためにを使用する必要があります。次にcontentType、サーバーがオブジェクトをJSONとして認識できるように指定します。これでうまくいくはずです:

$.ajax({
    url: url,
    type: "POST",
    data: JSON.stringify(data),
    contentType: "application/json",
    complete: callback
});

このJSONオブジェクトは、JavaScript 1.7 /ECMAScript5以降をサポートするブラウザーでネイティブに使用できることに注意してください。レガシーサポートが必要な場合は、json2を使用できます。

于 2012-10-02T16:02:46.813 に答える
31

いいえ、dataTypeオプションは受信したデータを解析するためのものです。

JSONを投稿するには、を介して自分でJSONを文字列化し、オプションをにJSON.stringify設定する必要があります。processDatafalse

$.ajax({
    url: url,
    type: "POST",
    data: JSON.stringify(data),
    processData: false,
    contentType: "application/json; charset=UTF-8",
    complete: callback
});

JSONすべてのブラウザがオブジェクトをサポートしているわけではないことに注意してください.parseJSON。jQueryにはが含まれていますが、文字列化機能は含まれていません。別のポリフィルライブラリが必要になります。

于 2012-10-02T16:05:30.043 に答える
5

ASP.NET MVCのような多くのアーキテクチャには、contentTypeとしてJSON.stringifyを処理する機能が組み込まれていることは知っていますが、私の状況は少し異なるため、将来誰かに役立つ可能性があります。私はそれが私に時間を節約したであろうことを知っています!

私のhttpリクエストは、IBM(AS400環境)のCGI APIによって別のサブドメインで処理されているため、これらのリクエストはクロスオリジンであるため、jsonpです。私は実際にjavascriptオブジェクトを介してajaxを送信します。これが私のajaxPOSTの例です:

 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
       });
于 2016-09-03T19:40:11.843 に答える
1

これをasp.netに送り返し、request.form []のデータが必要な場合は、コンテンツタイプを「application / x-www-form-urlencoded; charset=utf-8」に設定する必要があります。

元の投稿はこちら

次に、データ型を取り除きます。戻りを期待しない場合、POSTは失敗する前に約4分間待機します。こちらをご覧ください

于 2013-11-21T13:53:15.907 に答える