1

我的代码进行了 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 成功函数。

4

2 回答 2

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 开发,请使用 javascript 调试工具,例如FireBug 。除了其他有用的东西之外,它还允许您检查 AJAX 请求。如果您使用过它,您会看到从服务器发送的响应,如下所示:

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

而且您不需要来 StackOverflow 并提出这个问题,因为您已经知道答案了。

于 2012-08-22T06:07:10.897 回答
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

希望这可以帮助你!

于 2012-08-22T06:07:00.260 回答