Javascript XMLHttpRequest';访问控制允许原点';错误

Javascript XMLHttpRequest';访问控制允许原点';错误,javascript,jquery,http,Javascript,Jquery,Http,我正在编写一个基于web的应用程序,需要访问联机托管的txt文件并读取该文件。我正在使用以下代码执行此操作: var oReq = new XMLHttpRequest(); oReq.addEventListener("load", function(){ // parse the file } }) oReq.open("GET","https://bahadorsaket.com/others/ranking.txt"); oReq.send(); 我得到了这个错误:

我正在编写一个基于web的应用程序,需要访问联机托管的txt文件并读取该文件。我正在使用以下代码执行此操作:

var oReq = new XMLHttpRequest();
  oReq.addEventListener("load", function(){
     // parse the file
  }
})
oReq.open("GET","https://bahadorsaket.com/others/ranking.txt");
oReq.send();
我得到了这个错误:

未能加载:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许访问源“null”

在搜索和阅读之后,我尝试将代码更改为此

var oReq = new XMLHttpRequest();
  oReq.addEventListener("load", function(){
     // parse the file
  }
})
oReq.setRequestHeader( 'Access-Control-Allow-Origin', '*');
oReq.open("GET","https://bahadorsaket.com/others/ranking.txt");
oReq.send();
这一次我得到了这个错误:

无法对“XMLHttpRequest”执行“setRequestHeader”:对象的 国家必须开放


你知道怎么解决这个问题吗?我对这类东西很陌生

虽然不是最好的方法,但也可以使用代理

$.ajaxPrefilter( function (options) {
  if (options.crossDomain && jQuery.support.cors) {
    var http = (window.location.protocol === 'http:' ? 'http:' : 'https:');
    options.url = http + '//cors-anywhere.herokuapp.com/' + options.url;
    //options.url = "http://cors.corsproxy.io/url=" + options.url;
  }
});

$.get(
    'http://en.wikipedia.org/wiki/Cross-origin_resource_sharing',
    function (response) {
        console.log("> ", response);
        $("#viewer").html(response);
});
我过去用过这个,效果很好


摘自

虽然不是最好的方法,但也可以使用代理

$.ajaxPrefilter( function (options) {
  if (options.crossDomain && jQuery.support.cors) {
    var http = (window.location.protocol === 'http:' ? 'http:' : 'https:');
    options.url = http + '//cors-anywhere.herokuapp.com/' + options.url;
    //options.url = "http://cors.corsproxy.io/url=" + options.url;
  }
});

$.get(
    'http://en.wikipedia.org/wiki/Cross-origin_resource_sharing',
    function (response) {
        console.log("> ", response);
        $("#viewer").html(response);
});
我过去用过这个,效果很好


具体错误取自

var oReq = new XMLHttpRequest();
  oReq.addEventListener("load", function(){
     // parse the file
  }
})
oReq.open("GET","https://bahadorsaket.com/others/ranking.txt");
oReq.setRequestHeader( 'Access-Control-Allow-Origin', '*');
oReq.send();
未能对“XMLHttpRequest”执行“setRequestHeader”:必须打开对象的状态

这是因为您在调用
XMLHttpRequest
对象上的
open
方法之前设置了头。重新排序到此位置将修复该特定错误:

var oReq = new XMLHttpRequest();
  oReq.addEventListener("load", function(){
     // parse the file
  }
})
oReq.open("GET","https://bahadorsaket.com/others/ranking.txt");
oReq.setRequestHeader( 'Access-Control-Allow-Origin', '*');
oReq.send();

但是,正如前面提到的其他问题一样,如果后端服务器未配置为支持CORS,那么您可能会面临其他问题。

有关特定错误:

var oReq = new XMLHttpRequest();
  oReq.addEventListener("load", function(){
     // parse the file
  }
})
oReq.open("GET","https://bahadorsaket.com/others/ranking.txt");
oReq.setRequestHeader( 'Access-Control-Allow-Origin', '*');
oReq.send();
未能对“XMLHttpRequest”执行“setRequestHeader”:必须打开对象的状态

这是因为您在调用
XMLHttpRequest
对象上的
open
方法之前设置了头。重新排序到此位置将修复该特定错误:

var oReq = new XMLHttpRequest();
  oReq.addEventListener("load", function(){
     // parse the file
  }
})
oReq.open("GET","https://bahadorsaket.com/others/ranking.txt");
oReq.setRequestHeader( 'Access-Control-Allow-Origin', '*');
oReq.send();

但正如其他人所提到的,如果后端服务器未配置为支持CORS,您可能会面临其他问题。

浏览器将不允许您的代码从其他域获取内容,除非这些服务器提供访问控制标头。除非您能控制目标域,否则无法修复它。@感谢您的回复。我可以控制目标域。我怎样才能修好它?有没有其他地方可以存放我的txt文件,这样我就不必处理这个错误?访问控制头需要由服务器设置,而不是由客户端设置。如果您可以控制目标服务器,那么您只需要使用那些“CORS”头(GoogleCORS)对其进行配置。具体操作方式取决于服务器的具体情况。浏览器将不允许您的代码从其他域获取内容,除非这些服务器提供访问控制标头。除非您能控制目标域,否则无法修复它。@感谢您的回复。我可以控制目标域。我怎样才能修好它?有没有其他地方可以存放我的txt文件,这样我就不必处理这个错误?访问控制头需要由服务器设置,而不是由客户端设置。如果您可以控制目标服务器,那么您只需要使用那些“CORS”头(GoogleCORS)对其进行配置。具体如何操作取决于服务器的具体情况。