我正在使用下面的控制器来获取数据,但是它给出了错误'请求失败,响应为null,状态代码为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);
});
});
答案 0 :(得分:2)
当Angular返回代码0时,很可能是CORS错误。假设您的Angular代码在与 v1.seventh-league-763.appspot.com 不同的域上运行,我会是正确的吗?
一个域上的网站通常不允许访问另一个域上的服务器。为此,您需要使用CORS (Cross-origin resource sharing)。通常,CORS意味着使服务器响应 Access-Control-Allow-Origin = [client-domain] 标头。否则浏览器将被阻止,Angular将其作为状态代码0返回。
如果您只是将其粘贴到浏览器中并尝试以此方式获取它的原因是您不再尝试跨域访问它。所以CORS不是问题。
请注意,有些人可能会建议使用JSONP而不是CORS,因为JSONP也可以跨域工作,但这不是一个好的解决方案!它需要与CORS相同数量(如果不是更多)的服务器工作,但JSONP有很多安全问题。 CORS是新标准和跨域资源的当前建议,因此如果可能,请避免使用JSONP。