2011-06-09 50 views
2

我在与阿贾克斯问题(和/或jQuery的AJAX)的地位和状态302Ajax和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重定向到一个.bin302代码。我不想下载这个文件,我只想知道文件的路径。例如:

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

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

回答

2

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

+0

谢谢。但它不适用于Chrome。它继续下载文件。但是,我试图改变为“'async:false'”,并且有一个惊喜:文件没有被下载,而是抛出一个异常“”NETWORK_ERR:XMLHttpRequest Exception 101“”。我不能在jsFiddle上重现,但我想要的标题,我不能得到,只有简单的标题([code here](http://jsfiddle.net/RL22m/)) – 2011-06-09 21:12:31

+0

这很愚蠢。 Chrome不应该通过HEAD调用来下载资源:-(我没有诚实地说出任何其他想法,对不起。 – 2011-06-09 21:27:03

+0

没问题。无论如何,谢谢,因为我可以帮助有类似问题的人。 – 2011-06-10 00:32:21

0

一句话:我不认为你可以做HTTP协议的因由。
HTTP协议([1]:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html)规定302意味着重定向URI,并且浏览器如下所示。因此,javascript无法获得重定向响应,只能得到最终响应。

所以,你必须通过响应身体获得路径。