我的代码进行了ajax调用:
$.ajax({
url: "/Controller/EmailUserKeys",
dataType: 'json',
success: function () {
alert('success');
},
error: function () {
alert('error');
}
});
它在我的控制器中调用一个动作,它返回一些JSON:
public JsonResult EmailUserKeys(string UserId)
{
...
return Json(new { success = true });
}
我的问题是调用了ajax错误函数而不是ajax成功函数。
为什么?
PS。如果我的动作返回“return null;”,则调用ajax success函数。
答案 0 :(得分:8)
您必须允许在返回JSON结果时默认禁用的GET:
public JsonResult EmailUserKeys(string UserId)
{
...
return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}
或使用POST请求:
$.ajax({
url: "/Controller/EmailUserKeys",
type: "POST",
dataType: 'json',
data: { userId: 'some user id' },
success: function () {
alert('success');
},
error: function () {
alert('error');
}
});
也永远不要像你那样硬编码你的控制器动作的URL。在ASP.NET MVC应用程序中处理URL时始终使用url帮助程序:
url: "@Url.Action("EmailUserKeys", "Controller")",
以下是一条建议:如果您正在进行任何Web开发,请使用FireBug之类的javascript调试工具。除了其他有用的东西,它还允许您检查AJAX请求。如果您使用过它,您会看到从服务器发送的响应,如下所示:
此请求已被阻止,因为敏感信息可能是 当在GET请求中使用它时向第三方网站公开。 要允许GET请求,请将JsonRequestBehavior设置为AllowGet。
你不需要来StackOverflow并提出这个问题,因为你已经知道了答案。
答案 1 :(得分:5)
您应该将代码编辑为:
public JsonResult EmailUserKeys(string UserId)
{
return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}
有关详细信息,请参阅官方文档:
http://msdn.microsoft.com/en-us/library/system.web.mvc.jsonrequestbehavior.aspx
默认情况下禁用此功能的原因是因为JSON劫持。有关这方面的更多信息,请访问:
http://haacked.com/archive/2009/06/25/json-hijacking.aspx
希望这会帮助你!