我是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);
,但它并没有帮助我。
如何摆脱这个错误?
答案 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