0

以下のActionメソッドがJsonの結果を返そうとすると、データオブジェクトは$.ajax関数に戻りません。したがって、Jsonの結果として配列を送信する前に、配列をシリアル化していないと思います。ProgTypes、Agesなどの配列名を保持する必要があります。したがって、データがサーバーから返されるときに、どの配列がどれであるかがわかります。

   $.ajax({
            url: '/Education/FilterLists',
            dataType: 'json',
            data: { svalues: svalues, firsttype: $firsttype },
            traditional: true,
            success: function (data) {

              //do something with data

                alert('done');
            }
        });

..

      public JsonResult FilterLists(int[] svalues, string firsttype)
        {

 //Some logic takes place and below arrays are produced

            int[] ProgTypes = programs.Select(x => x.FilterValToCatMaps.FirstOrDefault(c => c.FilterValue.FilterID == 5).FilterValueID).Distinct().ToArray();

            int[] Ages = programs.Select(x => x.FilterValToCatMaps.FirstOrDefault(c => c.FilterValue.FilterID == 4).FilterValueID).Distinct().ToArray();

            int[] Countries = programs.Select(x => x.ParentCategory.ParentCategory.ParentCategory.CatID).Distinct().ToArray();


            return Json(new { progtypes = ProgTypes, ages = Ages, countries = Countries});

        }
4

1 に答える 1

1

GETリクエストを介してJSONデータを取得しようとしています(「type:'POST'」オプションを指定しない限り、jQuery AJAXは暗黙的にGETを実行します)。ASP.NETは、セキュリティ上の理由から、次のメッセージを除いてGETを返すJSONをブロックします。

「これがGETリクエストで使用されると、機密情報がサードパーティのWebサイトに開示される可能性があるため、このリクエストはブロックされました。GETリクエストを許可するには、JsonRequestBehaviorをAllowGetに設定します。」

リクエストが成功しないため、成功関数が実行されることはありません。FireFox用のFireBugを入手して[ネット]タブを使用するか、デバッガーに組み込まれているchromesを使用して、Web開発(特にAJAX)を行う場合は[ネットワーク]タブを使用することをお勧めします。ネットワークエラーがすぐそこに表示され、時間を大幅に節約できます。

この時点で、.NETコードを変更するかJavaScriptを変更するかの、2つのオプションがあります。以下のいずれかを選択してください。

$.ajax({
    url: '/Education/FilterLists',
    dataType: 'json',
    type: 'POST', //ADD POST HERE
    data: { svalues: svalues, firsttype: $firsttype },
    traditional: true,
    success: function (data) {

      //do something with data

        alert('done');
    }
});

また

return Json(new { progtypes = ProgTypes, ages = Ages, countries = Countries}, JsonRequestBehavior.AllowGet);
于 2012-06-25T05:33:10.743 に答える