1

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

(实际上来自 Valums FileUploader 脚本)

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

是什么赋予了?还有另一种方法可以在所有浏览器中准确检查吗?

谢谢。

4

4 回答 4

1

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

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

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

要解决此问题,您有两个选项之一。

  1. 修复脚本,以便将标头添加到 XHR 请求。
  2. 使用没有错误的其他脚本。
于 2012-09-03T01:31:47.700 回答
1

如果像我一样,您对 ajax 和“普通”页面使用了相同的 URL。那么 IE 就可以使用缓存的版本了。如果是这种情况,它将以 302 响应响应(我认为)。

修复

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

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

于 2017-04-04T14:26:13.260 回答
0

IsAjaxRequest测试当您使用它们的 AJAX 帮助程序时,像 jQuery 这样的库设置的某个 HTTP 标头是否存在。您正在使用的上传脚本回退到 IE 中隐藏的 iframe。由于 jQuery 的 AJAX 助手没有在 iframe 回退中使用,因此 MVC 查找的标头没有在请求中设置。

我对那个上传库不够熟悉,不知道它是否通过它action/controller/upload/?IsAjaxRequest=true. 然后,您可以检查Request.QueryString["IsAjaxRequest"] == "true",无论客户端实现如何,它都应该工作(假设上传者确实通过了该查询字符串)。

于 2012-09-03T02:02:57.053 回答
0

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

于 2012-11-14T06:16:56.907 回答