C# jQuery$.ajax成功未从JsonResult触发

C# jQuery$.ajax成功未从JsonResult触发,c#,asp.net-mvc,jquery,C#,Asp.net Mvc,Jquery,我的代码进行ajax调用: $.ajax({ url: "/Controller/EmailUserKeys", dataType: 'json', success: function () { alert('success'); }, error: function () { alert('error'); } }); 它在我的控制器中调用一个操作,该操作返回一些JSON: public JsonResult E

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

您应该将代码编辑为:

public JsonResult EmailUserKeys(string UserId)
{
    return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}
有关更多信息,请参阅官方文档:

默认情况下禁用此功能的原因是JSON劫持。有关这方面的更多信息,请参见:


希望这对你有帮助

您应该将代码编辑为:

public JsonResult EmailUserKeys(string UserId)
{
    return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}
有关更多信息,请参阅官方文档:

默认情况下禁用此功能的原因是JSON劫持。有关这方面的更多信息,请参见:


希望这对你有帮助

返回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")",
这里有一条建议:使用javascript调试工具,比如进行任何web开发。除了其他有用的功能外,它还允许您检查AJAX请求。如果您使用了它,您将看到从服务器发送的响应,该响应如下所示:

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


您不必到StackOverflow来问这个问题,因为您已经知道了答案。

您必须允许GET,返回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")",
这里有一条建议:使用javascript调试工具,比如进行任何web开发。除了其他有用的功能外,它还允许您检查AJAX请求。如果您使用了它,您将看到从服务器发送的响应,该响应如下所示:

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


您不必到StackOverflow来问这个问题,因为您已经知道答案了。

谢谢您的回答。这也说明了如何解决我的问题@Darin Dimitrov还提到Firebug允许您查看AJAX请求,我认为这将对其他用户有所帮助。没问题,很高兴它帮助了您!谢谢你的回答。这也说明了如何解决我的问题@Darin Dimitrov还提到Firebug允许您查看AJAX请求,我认为这将对其他用户有所帮助。没问题,很高兴它帮助了您!谢谢你,达林。我不知道FireBug允许我检查AJAX请求。我已经安装了它,下次当我遇到AJAX问题时,我会使用它。@Robert,不,不,不仅仅是当你遇到AJAX问题时。当您遇到javascript问题时,请始终使用它。FireBug做的事情比AJAX检查多得多。谢谢你,达林。我不知道FireBug允许我检查AJAX请求。我已经安装了它,下次当我遇到AJAX问题时,我会使用它。@Robert,不,不,不仅仅是当你遇到AJAX问题时。当您遇到javascript问题时,请始终使用它。FireBug做的事情比AJAX检查多得多。