在.NET MVC 3.0中使用$ .getJSON

问题描述

| 我想在ASP.NET MVC 3.0中使用jQuery.getJSON函数,因此我编写了以下代码进行测试:
    <input id=\"btn\" type=\"button\" />

<script>
        $(\"#btn\").click(function () {
            $.getJSON(\"/Location/GetData\",null,function (data) {
                alert(data);
            });
        });


</script>
我有一个LocationController与以下方法
public JsonResult GetData()
        {
            List<int> result = new List<int>(){1,4,5};
            return Json(result);
        }
但这不起作用! GetData方法调用,但不会显示“警告”!     

解决方法

        您需要通过将返回值更改为以下内容,告知MVC允许通过GET调用JSON操作:
return Json(result,JsonRequestBehavior.AllowGet);
默认情况下(出于安全原因),它们仅允许通过POST请求Json。     ,        为了防止跨脚本攻击和JSON劫持,MVC 2+(我认为是2)要求您使用
POST
(而不是
GET
)访问具有JSON响应的操作。 您可以通过在设置
JsonRequestBehavior.AllowGet
标志的位置使用
Json()
重载来覆盖此行为,但是正如博客文章中所述,这不是一个好主意。 我执行所有JSON请求(无论是jsut加载数据还是回发)的方式是使用
$.post
jQuery方法,并将控制器操作限制为仅接受
HttpPost
。 因此您的代码将变为:
$(\"#btn\").click(function () {
    $.post(\"/Location/GetData\",null,function (data) {
        alert(data);
    });
});
[HttpPost]
public JsonResult GetData()
{
    List<int> result = new List<int>(){1,4,5};
    return Json(result);
}
    ,        首先。安装适用于Firefox的Firebug,以便您可以检查服务器发送的响应,Chrome和IE内置了可以使用的工具。 在不知道响应的情况下,我将假设问题是ASP.NET MVC保护您免受JSON劫持,因为默认情况下不允许为GET请求返回JSON。 尝试更改为:
return Json(result,JsonRequestBehavior.AllowGet);