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 数据(jQuery AJAX 隐式执行 GET,除非您指定“类型:'POST'”选项“)。出于安全原因,ASP.NET 阻止 JSON 返回 GET,但以下消息除外:

“此请求已被阻止,因为在 GET 请求中使用敏感信息可能会泄露给第三方网站。要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet。”

您的成功函数永远不会被执行,因为请求不成功。如果您要进行任何 Web 开发(尤其是 AJAX),我建议您为 FireFox 获取 FireBug 并使用“网络”选项卡或使用内置调试器的 chrome 并使用“网络”选项卡。网络错误会在那里弹出,它可以为您节省大量时间。

此时您有两个选择,更改您的 .NET 代码或更改您的 JavaScript,请在​​下面选择一个:

$.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 回答