【问题标题】:jQuery $.ajax success not firing from JsonResultjQuery $.ajax 成功没有从 JsonResult 触发
【发布时间】:2012-08-22 06:04:06
【问题描述】:

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

为什么?

附言。如果我的操作返回“return null;”,则调用 ajax 成功函数。

【问题讨论】:

    标签: c# asp.net-mvc jquery


    【解决方案1】:

    您必须允许返回 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 来问这个问题,因为你已经知道答案了。

    【讨论】:

    • 谢谢达林。我不知道 FireBug 允许我检查 AJAX 请求。我已经安装了它,下次遇到 AJAX 问题时会使用它。
    • @Robert,不,不仅在您遇到 AJAX 问题时。当您遇到 javascript 问题时,请始终使用它。 FireBug 做的事情比 AJAX 检查要多。
    【解决方案2】:

    你应该编辑你的代码:

    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

    希望对你有所帮助!

    【讨论】:

    • 也感谢您的回答。它也显示了如何解决我的问题。 @Darin Dimitrov 还提到 Firebug 允许您查看 AJAX 请求,我认为这对其他用户会有所帮助。
    • 没问题,很高兴能帮到你!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 2012-05-04
    • 2011-02-22
    • 2013-05-20
    相关资源
    最近更新 更多