我正在使用HttpContext.Request.IsAjaxRequest()
来检查传入的请求是否来自ajax调用。
(实际上来自Valums FileUploader脚本)
这适用于Chrome,但不适用于IE?
是什么给出的?还有其他方法可以在所有浏览器中准确地检查这一点吗?
感谢。
答案 0 :(得分:1)
IsAjaxRequest()
只是检查HTTP请求中是否存在"X-Requested-With"
标头。如果它不存在,或者具有错误的值,则检查将返回false。
我的猜测是Chrome和FF可能会在发出AJAX请求时为您添加此项,如果它尚未存在,但IE不是。
这意味着脚本中很可能存在错误,并且没有添加标题。使用Fiddler或IE开发人员工具来检查这一点应该很容易。
要解决此问题,您可以选择以下两个选项之一。
答案 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。