我正在使用下面的 Controller 来获取数据,但它给出错误“请求失败,响应为空,状态代码为0”。但是从服务器状态来看是200,并且在浏览器调试工具中也显示200状态。此 API 可在 Firefox 和 Chrome 上运行,但不能使用 AngularJS。
我正在使用下面的代码 AngularJS 代码来访问数据。为什么下面的 angularJS 代码在浏览器中工作时无法提取数据?
module.controller('bipartiteAPICtrl', function($scope,$http) {
$scope.data = null;
$http.get('http://v1.seventh-league-763.appspot.com/getbipartitejs?regionfile=lincRNATSS_200bp_segmented.bed+&celltype1=E050_15_coreMarks_mnemonics.bed+&celltype2=E048_15_coreMarks_mnemonics.bed')
.success(function(response) {
alert("webservice completed");
console.log("Your name is: " + response.data);
})
.error(function(response, status) {
console.log("The request failed with response " + response + " and status code " + status);
});
});
最佳答案
当 Angular 返回代码 0 时,很可能是 CORS 错误。我假设您的 Angular 代码运行在与 v1.seventh-league-763.appspot.com 不同的域上是否正确?
通常不允许一个域上的网站访问另一域上的服务器。为此,您需要使用 CORS (Cross-origin resource sharing) 。通常,CORS 意味着让服务器使用 Access-Control-Allow-Origin=[client-domain] header 进行响应。否则浏览器将被阻止,Angular 会将其作为状态代码 0 返回。
如果您只是将其粘贴到浏览器中并尝试以这种方式获取它,它会起作用的原因是您不再尝试跨域访问它。所以 CORS 不是问题。
<小时/>请注意,有些人可能建议使用 JSONP 而不是 CORS,因为 JSONP 也可以跨域工作,但这不是一个好的解决方案!它需要与 CORS 相同数量(如果不是更多)的服务器工作,但 JSONP 存在很多安全问题。 CORS 是跨域资源的新标准和当前建议,因此如果可能,请避免使用 JSONP。
关于javascript - API 不是来自 AngularJS,但可以在浏览器上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30144604/