【问题标题】:Ajax and status 302Ajax 和状态 302
【发布时间】:2011-09-12 01:03:35
【问题描述】:

我遇到了 ajax(和/或 jQuery ajax)和状态 302 的问题。

这就是我正在尝试的:

var xhr = new XMLHttpRequest();
xhr.open("GET", 'some_page_that_I_cant_change.php');
xhr.onreadystatechange = function(){
    console.log(xhr.readyState, xhr.status);
};
xhr.send(null);

some_page_that_I_cant_change.php 重定向到带有302 代码的.bin。我不想下载这个文件,我只想知道文件的路径。示例:

./some_page_that_I_cant_change.php
./path/to/bin/file.bin << I wan't only this path as string

问题是 Chrome 会自动重定向到文件,而不告诉我脚本的路径。有解决办法吗?

【问题讨论】:

    标签: javascript ajax jquery http-status-code-302


    【解决方案1】:

    一句话:我不认为你能做到这一点,因为 HTTP 协议。
    HTTP协议([1]:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html)规定302表示重定向URI,浏览器跟随。所以,javascript无法得到重定向响应,只能得到最终响应。

    因此,您必须通过响应正文获取路径。

    【讨论】:

      【解决方案2】:

      有一个关于解决方案和变通办法的完全相同主题的旧线程: How to manage a redirect request after a jQuery Ajax call

      【讨论】:

        【解决方案3】:

        如果您使用 HEAD 请求而不是 GET 请求,我怀疑这会满足您的要求。您应该只看到响应中的标题,没有响应正文(即,不会下载 .bin)。

        【讨论】:

        • 谢谢。但它不适用于 Chrome。它继续下载文件。但是,我尝试更改为“async:false”并有一个惊喜:文件没有被下载,而是抛出异常"NETWORK_ERR: XMLHttpRequest Exception 101"。我无法在 jsFiddle 上重现,但我想要的标头,我也无法获得,只有简单的标头(code here
        • 这很愚蠢。 Chrome 不应该通过 HEAD 调用下载资源 :-( 老实说,我没有任何其他想法,抱歉。
        • 没问题。不管怎么说,还是要谢谢你。我也起来了,因为可以帮助有类似问题的人。
        猜你喜欢
        • 1970-01-01
        • 2015-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-29
        • 2011-11-23
        • 2012-07-29
        • 2010-09-16
        相关资源
        最近更新 更多