响应没有得到javascript中的标头

时间:2014-12-13 09:23:31

标签: javascript ajax

我是AJAX的新手,我有以下代码:

function get_filesize(url, callback) {
var xhr = new XMLHttpRequest();
xhr.open("HEAD", url, true); 

xhr.onreadystatechange = function() {
    if (this.readyState == this.DONE) {
        callback(parseInt(xhr.getResponseHeader('Access-Control-Allow-Credentials')));
    }
};
xhr.send();
}

get_filesize("http://fileraja.com/download/?songURL=./Tamil/K/Kaththi_160kbps/Pakkam_Vanthu-StarMusiQ.Com.mp3", function(size) {
var estimatedtime = (new Date().getTime())/size;
var time = new Date(estimatedtime);
console.log(time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds());
});

当我运行此代码时,我收到如下错误:

 XMLHttpRequest cannot load http://fileraja.com/download/?songURL=./Tamil/K/Kaththi_160kbps/Pakkam_Vanthu-StarMusiQ.Com.mp3. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

经过一些研究,我发现它是由CORS政策引起的,所以我尝试添加代码xhr.setRequestHeader("Access-Control-Allow-Credentials",true);,但它并没有帮助我。

如何摆脱这个错误?

2 个答案:

答案 0 :(得分:0)

  

经过一番搜索,我发现它是由于CORS政策...所以我尝试添加代码......

您无法任何客户端,这将改变服务器的CORS政策。这是SOP和CORS的要点:服务器确定是否允许任何特定客户端通过ajax获取其内容。

因此,除非http://fileraja.com愿意在他们的端添加相关的CORS标头,否则您无法使用ajax对其域进行跨源请求。您可能会询问他们,或询问他们是否提供JSONP API(JSONP不受SOP约束,因为它不是ajax)。否则,您必须使用自己的服务器代理请求。

答案 1 :(得分:0)

此错误是由于CORS(跨源资源共享)策略,该策略不允许不是来自同一来源的请求。可以在资源上设置标头Access-Control-Allow-Headers: *以允许所有请求。

其他方法包括T.J Crowder提到的JSONP和代理请求的相同服务器。

这可能是一个很好的阅读CORS and POST Request