如何使用jQuery处理状态码为307的重定向

7

我在使用jquery时遇到了很多关于307临时重定向状态码的问题。

我有一个apache服务器,当需要时返回307。 307被正确地抛出(我可以通过firebug或wireshark跟踪看到),但我似乎无法触发重定向。

$.ajax({
    url: someURL,
    type: 'GET',
    processData: false,
    data: someData,
    cache: true,
    timeout: 5000,
    statusCode: {
        307: function() {
            alert('307'); // this does NOT get called
        }
    },
    error: function(request, status, error){
        try {
            console.log(request.getAllResponseHeaders());
        }
        catch (err) { }
    },
    success: function(data, textStatus, response){
        try {
            console.log(response.getAllResponseHeaders());
        }
        catch (err) { }
    });

我想查看头部信息以便使用 getAllResponseHeaders() 方法进行重定向。这对于200状态码的情况很有效,但是在307的情况下无法触发(无论是在success还是error处理程序中)。
当使用Firebug检查流量时,我注意到一个问题:重定向后立即向服务器发送了一个ajax GET请求,该请求的URL为重定向的URL!然而,这导致了失败。
那么,是什么原因呢? 编辑: 我尝试过使用jquery 1.5.1和1.6.1。

请确保您的HTTP响应正文至少包含一个空格。这将有助于使浏览器更好地运行。有一个名为“Live HTTP Headers”的Firefox插件可以帮助调试此问题。您正在使用jQuery v1.5或更高版本,对吗? - Teddy
@ Teddy。我尝试了使用jQuery 1.5.1和1.6.1。此外,整个重定向HTML页面都会返回307。 - Darcy
1个回答

5

我进行了更多的研究,发现浏览器会自动处理307,而且无法被jquery拦截。

最终我使用了不同的statusCode来进行重定向 (410 Gone)。

这可能不是最好的解决方案,但我无法访问apache服务器代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接