【问题标题】:How to call external rest service from angularjs?如何从 angularjs 调用外部休息服务?
【发布时间】:2013-04-11 01:53:35
【问题描述】:



我正在尝试使用 $http 服务从 Angular 调用外部 REST 服务。
问题是我被困在 $http.get 方法上,因为每次我调用
其余服务时,我都会收到一个状态 = 0 的错误,并且错误回调的数据参数
中没有任何信息。

到目前为止,我已经尝试在端口 5000 上调用本地服务运行:$http.get('http://localhost:5000/ping'),这应该返回一个带有属性和值的 json 对象。另一种方法是致电http://api.flickr.com/services/rest/?method=flickr.test.echo&name=test,希望得到答复。对于他们两个,我都遇到了同样的错误:我之前提到过。

调用是从一个注入 http 服务的角度控制器发出的。

谢谢。

【问题讨论】:

  • 网址之间不应有空格。
  • 处理来自 $http 请求的响应: $http.get(url, {}).then(function(result) { console.log('success', result.data);} , function(result) { console.log('error'); });
  • 向我们展示代码。你怎么知道你得到一个status = 0的错误并且错误回调的data参数中没有信息。即使这失败了:api.flickr.com/services/rest/… 因为我没有提供 API 密钥,所以我的机器上的状态是 200 OK。
  • @jpmorin - 我在写问题时错误地添加了空格,网址很好。
  • @Basarat Ali 我现在无法访问代码,但我发布的信息是从 firebug 的 javascript 调试工具中检索到的。

标签: http rest angularjs


【解决方案1】:

由于 $http 返回一个 Promise,您可以使用 .then() 方法在 Promise 解决时记录您的结果,或者在出现任何错误时记录错误:

$http.get('http://localhost:5000/ping')
    .then(function(returnedJson) {
        console.log(returnedJson.data);
    })
    .catch(console.error) // or $log.error if you are using $log from Angular

请注意,干净的 JSON 响应是通过记录 returnedJson 对象的 .data 属性获得的。由于它是一个 Promise,它包含与使用 Web 服务无关的其他信息。

另外请注意,您要使用的 Web 服务也应该与您的 Angular 应用在​​同一个域中,否则您可能会遇到跨域错误,除非该服务通过公开跨域策略来允许从外部网站使用。

(在此处查找更多信息:Can someone post a well formed crossdomain.xml sample?

如果是这样的话,这篇文章应该会有所帮助:

jQuery AJAX cross domain

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    如果有参数,请确保您已正确传递参数。
    一般语法应如下所示:

    $http.get('../link/yourApplication/searchBySomeNumber?someNum='+$scope.someNum+'&asOfDate='+asOfDate+'&status=undefined') 
                .success(function(data, status, headers, config) {
                    //your code
                    console.log('Data return successful');
                })
                .error(function(data, status, headers, config) {
                    $scope.status = status;
                    alert('Info Error');
                    console.log('Group Info Error');
                });
    

    【讨论】:

      【解决方案3】:

      你试过了吗:

          $http({method: 'GET', url: 'someURL'}).
                  success(function(data, status, headers, config) {
                      //set view model or do something.
      
                  }).
                  error(function(data, status, headers, config) {
      
                  });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-02
        • 1970-01-01
        • 2012-06-29
        • 1970-01-01
        • 2019-02-13
        • 2016-10-15
        • 1970-01-01
        • 2011-08-10
        相关资源
        最近更新 更多