26

または、その問題についてデータを前処理する他の関数:)

サーバー側のフレームワークのため、データを送信する前に常に JSON.stringify を呼び出す必要があります。不要なボイラープレートを追加するのを忘れる可能性があります。

今私は持っています:

$.ajax({
    [...]
    data: JSON.stringify({ someData: self.someData }),
    [...]
});

を好む:

$.ajax({
    [...]
    data: { someData: self.someData },
    [...]
});

私は ajaxSetup を調べましたが、これまでのところ解決策が見つかりません...

アップデート

これが必要な理由については、次のthis questionを参照してください。サーバー側でこれを修正できますが、今のところクライアント側でこれを修正する方法を探しています。

4

4 に答える 4

30

いいえ、データをオブジェクトから JSON に前処理する組み込みの方法はありません。ただし、 と を使用ajaxSetupbeforeSendてそれを行うことができます。

$.ajaxSetup({
    beforeSend: function(jqXHR,options){
        if ( options.contentType == "application/json" && typeof options.data != "string" ) {
            options.data = JSON.stringify(options.data);
        }
    }
});

ここで、json をサーバーに送信する必要があるリクエストに to を設定して、if ステートメントでキャッチされるようにしてくださいcontentTypeapplication/json

于 2013-06-20T14:21:47.697 に答える
3

jQuery.prefilterを使用する別のアプローチを次に示します。

$.ajaxPrefilter("json", function(options, originalOptions) {
  options.data = JSON.stringify(originalOptions.data || null);
  options.contentType = "application/json" // content type of *request*
});

$.ajax({
  data: {foo: [1,2,3]},
  dataType: "json" // expected content type of *response* (must match prefilter, above!)
  [...]
});

プレフィルターはオプションで一致するため、リクエストdataTypeで手動で設定する必要があります。$.ajaxがプレフィルタ (「json」) に一致する場合、dataTypeリクエストが送信される前に、dataオブジェクトが文字列に変換され、contentTypeヘッダーが一致するように設定されます (「application/json」)。

これは、将来のすべてのリクエストに影響を与えるグローバルな変更であることに注意してください。$.ajaxdataType: "json"

于 2016-08-26T18:13:08.337 に答える
1

これが私が使用するjQuery.prefilter関数です(beforeSendアプローチよりも優れています)。これはあらゆるデータ型に一致し、postまたはputリクエストのあらゆるオブジェクトをシリアル化します。

$.ajaxPrefilter(function (options, org) {
    var rtype = options.type.toLowerCase();
    if ((rtype === "post" || rtype === "put") && org.data !== null && typeof org.data === 'object') {
        options.data = JSON.stringify(org.data);
    }
});

お役に立てれば。

于 2017-04-07T10:29:40.443 に答える
-3

ユーザー Jquery.getJSON()。json データを直接取得できます。

$.getJSON('', function(data) {

//you can use data.
});

http://api.jquery.com/jQuery.getJSON/

于 2013-06-20T14:45:53.413 に答える