我有一个对服务器端点的 AJAX 调用,该端点执行 301 重定向到同一页面,但带有斜杠。
浏览器在使用 AJAX 调用时会遵循重定向还是忽略它们?就我而言,它不遵循它们,但我认为它可能来自服务器配置。
如果您使用的是 jquery,您可以查看以下问题来实现它。默认情况下,jQuery(以及大多数带有 Ajax 的库)默认情况下不遵循重定向:
也许这个答案有点晚了,但我对 ajax 请求的 301 响应也有同样的问题。解决方案非常简单:
apache重写规则是这样的:
RewriteRule ^([^/]\w+)/?$ index.php?%{QUERY_STRING} [L,E=MODULE:$1]
您的 XHR-Request 网址看起来像这样:
/this/is/a/canonical/url + '?param=1¶m=2...'
如果您不使用直接文件调用 (fi *.php) 并改写为规范 URL(看起来像没有 fi *.php 的目录路径),它将导致 301 永久移动。
要解决此问题,只需将 / 添加到您的 XHR-Request-URL 中,如下所示:
/this/is/a/canonical/url + '/' + '?param=1¶m=2...'
也许这会对某人有所帮助。
我也遇到了这个问题,关于尾部斜杠的建议让我思考......我在我的 Web.Config 中有一个重写规则,使所有内容都小写,这就是我的 AJAX 调用搞砸的原因。我正在发布到 GetResults(显示为 301),而我的重写器(出于某种未知原因?)正在将其更改为小写的 getresults GET,从而导致 404。
希望这可能对其他人有所帮助。
根据 jQuery 的 API 文档(http://api.jquery.com/jQuery.ajax/),async:false
(又名同步模式)不支持跨域和dataType: "jsonp"
请求。