2

データ オブジェクト内でオブジェクトを渡す必要がありますが、機能していません

このサイトで見つけた次の関数を使用して、フォーム データを JSON に変換します。

$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

オブジェクトをサブオブジェクトとして渡す必要がありますが、機能していません。フィルターは、インスペクターのクエリ文字列パラメーターにも表示されません

var filters = $('.filtersForm').serializeObject();

$.ajax({
    type: 'GET',
    data: {script:'search',page:page,filters:filters},
    success: function(data){
    }
});

ここに画像の説明を入力

写真で「フィルター」がどのように欠落しているかを確認してください

そのようなオブジェクトを渡すことができない理由を誰かが説明できますか?

4

2 に答える 2

4

代わりにこれを試してください:

$.ajax({
  type: 'POST',
  data: JSON.stringify({
    script: 'search',
    page: page,
    filters: filters
  }),
  contentType: 'application/json'
});
  1. タイプを からGETに変更しましたPOST。これにより、リクエストボディを送信できます。
  2. 組み込みの JSON オブジェクトを使用してデータパラメーターを文字列化して、JS オブジェクトを JSON 形式の文字列に文字列化します。(古いブラウザにはこの組み込みオブジェクトがない場合があります。その場合は、json2.jsを使用して追加してください)
  3. contentTypeを に設定しますapplication/json。これは基本的に、リクエストボディがこのタイプであることを示しています...これは、JSON に文字列化したためです。
于 2013-07-11T17:58:05.380 に答える