javascript - API 不是来自 AngularJS,但可以在浏览器上运行

标签 javascript angularjs

我正在使用下面的 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/

相关文章:

node.js - 将 angular.js $resource 与 Express 框架一起使用

javascript - 从字符串中删除两个相同的字符串

javascript - 如何通过字符串作为括号表示法在javascript中获取嵌套对象?

javascript - 将事件监听器添加到 Angular Directive(指令)的正确方法

javascript - 无法将数据添加到从 cookie 中取出的数组中

php - PUT 和 DELETE 请求 - 共享主机上的 Laravel 应用程序

javascript - 使用循环墙时间优化函数性能

javascript - 如果链接存在图像,则返回 true,否则返回 false

javascript - 我可以创建一个引用对象中节点的变量吗?

java - Eclipse 中的 Angular Js