2012-09-12 85 views
5

我有一个服务器端点的AJAX调用301做重定向到同一页面,但有一个结尾的斜杠。301在AJAX上重定向 - 重定向?

浏览器在使用AJAX调用时是否遵循重定向,还是忽略它们?在我的情况下,它不遵循它们,但我想它可能是从服务器配置的东西。

回答

4

如果你正在使用jQuery,你可以看看下面的问题来实现它。默认情况下,jQuery的(和使用Ajax最库)不遵循重定向默认:

How to manage a redirect request after a jQuery Ajax call

How to prevent ajax requests to follow redirects using jQuery

handle jquery ajax redirect

+1

好,所以jQuery不遵循重定向,我明白了。谢谢。 –

+7

恩,没有。 XHR将透明地遵循重定向。 –

+1

并非在所有情况下。我有一个301重定向设置和FF不会跟着他们。然而,Chrome确实如此。 – threejeez

3

也许这个答案是有点晚了,但我有对于ajax请求的301响应同样存在问题。该解决方案是非常简单:

阿帕奇重写规则是这样的:

RewriteRule ^([^/]\w+)/?$ index.php?%{QUERY_STRING} [L,E=MODULE:$1] 

你XHR请求的URL看起来成才这样的:

/this/is/a/canonical/url + '?param=1&param=2...' 

这将导致301永久移动如果您不使用直接文件调用(fi * .php),并重写为规范URL(看起来像不带fi * .php的目录路径),则可以改为。

为了解决这个问题,只需添加/你XHR请求的URL是这样的:

/this/is/a/canonical/url + '/' + '?param=1&param=2...' 

也许这将帮助别人。

+0

这为我修好了,谢谢 –

-1

根据jQuery的API文档(http://api.jquery.com/jQuery.ajax/),async:false(又名同步模式)不支持跨域请求和dataType: "jsonp"请求。

+2

对不起,但是这个问题与这个问题有什么关系? –

+0

@EduardLuca对不起,您的重定向不会跨域。 – GlacJAY

+0

我不需要跨越另一个域,重定向发生在同一个URL上,但是以斜线结尾。 –

2

我也有这个问题,关于结尾的斜线的建议,让我想......我在我的web.config重写规则,使一切小写字母,这就是被搞乱了我的AJAX调用。我发布到GetResults(显示为301)和我的重写器(出于某些未知原因?),将其更改为较低的getresults GET,结果为404。