2012-08-22 47 views
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成功函数。

回答

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到控制器的动作像你一样。

url: "@Url.Action("EmailUserKeys", "Controller")", 

这里还有一个忠告:使用URL在ASP.NET MVC应用程序处理时,必须使用网址助手使用JavaScript调试工具,如FireBug如果你正在做的任何Web开发。在其他有用的东西中,它允许您检查AJAX请求。如果你使用过它,你会看到来自这将是这个样子的服务器发送的响应:因为敏感信息可能被 透露给第三方网站时,这是用来

这一要求已被封锁一个GET请求。 要允许GET请求,请将JsonRequestBehavior设置为AllowGet。

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

+0

感谢您Darin。我不知道FireBug允许我检查AJAX请求。我确实已经安装了它,并在下一次遇到AJAX问题时使用它。 – Robert

+0

@Robert,不,不仅在你遇到AJAX问题时。当您遇到javascript问题时,请一直使用它。 FireBug做了比AJAX检查更多的事情。 –

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

希望这可以帮助你!

+0

感谢您的回答。它也展示了如何解决我的问题。 @Darin Dimitrov还提到Firebug允许您查看我认为对其他用户有用的AJAX请求。 – Robert

+0

没问题,很高兴它帮助你了! –