IsAjaxRequest似乎不适用于Internet Explorer

时间:2012-09-03 00:08:43

标签: c# asp.net-mvc jquery

我正在使用HttpContext.Request.IsAjaxRequest()来检查传入的请求是否来自ajax调用。

(实际上来自Valums FileUploader脚本)

这适用于Chrome,但不适用于IE?

是什么给出的?还有其他方法可以在所有浏览器中准确地检查这一点吗?

感谢。

4 个答案:

答案 0 :(得分:1)

IsAjaxRequest()只是检查HTTP请求中是否存在"X-Requested-With"标头。如果它不存在,或者具有错误的值,则检查将返回false。

我的猜测是Chrome和FF可能会在发出AJAX请求时为您添加此项,如果它尚未存在,但IE不是。

这意味着脚本中很可能存在错误,并且没有添加标题。使用Fiddler或IE开发人员工具来检查这一点应该很容易。

要解决此问题,您可以选择以下两个选项之一。

  1. 修复脚本,以便将标头添加到XHR请求中。
  2. 使用没有错误的其他脚本。

答案 1 :(得分:0)

IsAjaxRequest测试是否存在某个HTTP头,当你使用他们的AJAX助手时,这些库就像jQuery一样。您正在使用的上传器脚本falls back to a hidden iframe in IE。由于jQuery的AJAX助手未在iframe回退中使用,因此未在请求中设置头MVC查找。

我对该上传器库不太熟悉,知道它是否在action中传递了查询字符串参数,但我建议尝试像/controller/upload/?IsAjaxRequest=true这样的操作。然后,您可以检查Request.QueryString["IsAjaxRequest"] == "true",无论客户端实现如何(假设上传者确实通过了该查询字符串),它都应该有效。

答案 2 :(得分:0)

它实际上是一个Jquery 1.7.2错误,因为它没有添加“X-Requested-With”标头。他们在版本1.8.2中修复了它。 PS:我自己测试了这个

答案 3 :(得分:0)

如果像我一样,您使用了相同的网址,用于ajax和正常的'页。然后,IE可以使用缓存版本。如果是这样的话,它会回复302响应(我认为)。

修复

 $.ajax({
                    method: "GET",
                    cache:false,

将缓存标志添加到您的ajax。