问题描述
|
我想在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);