2

我对使用 http promise 对象有些陌生。

我正在使用 Angular JS 从 API http://www.asterank.com/api返回 json 。

我有一个角度控制器进行这样的调用:

  $http.jsonp('http://www.asterank.com/api/asterank?query={%22e%22:{%22$lt%22:0.1},%22i%22:{%22$lt%22:4},%22a%22:{%22$lt%22:1.5}}&limit=1&callback=JSON_CALLBACK').
success( function(data) {
  console.log('great success');
}).error( function(r,t,et){
  console.log(r);
  console.log(t);
  console.log(et);
});

当我查看 Chrome 的网络监视器时,我看到了响应:

HTTP/1.1 200 OK
Date: Sun, 06 Oct 2013 19:06:26 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Server: gunicorn/18.0
Set-Cookie: session=eyJkaXNjb3Zlcl9maXJzdF90aW1lIjpmYWxzZX0.BTNGMg.eF89vHEeIpLH8sZiJOwCAJEjPhA; HttpOnly; Path=/
Content-Encoding: gzip

但我看到错误方法触发,从来没有成功:(

这仅仅是因为服务器不支持 JSONP 吗?如果这些 API 不支持 JSONP 但支持 JSON,您如何访问这些 API 的数据?

找到了一个不错的解决方案:

以防万一有人遇到这种情况并且像我一样使用 EXPRESS,您可以使用以下方法在您的服务器上创建一个简单的小 API:

https://npmjs.org/package/request

在这里,我不需要启动整个代理服务器,但您可以从您的服务器请求 JSON 数据。

4

2 回答 2

1

这里唯一的问题是该站点甚至没有声明 JSONP 支持。

如果这些 API 不支持 JSONP 但支持 JSON,您如何访问这些 API 的数据?

在后端编写您的代理层。

于 2013-10-06T19:09:10.687 回答
0

试试这样:

var url = 'http://www.asterank.com/api/asterank?query={%22e%22:{%22$lt%22:0.1},%22i%22:{%22$lt%22:4},%22a%22:{%22$lt%22:1.5}}&limit=1&callback=json_callback';

$http({method: 'GET', url: url })
                .success(function(data,status,headers,config){
                    console.log(data);
                }).error(function(data,status,headers,config){
                    console.log('API CALL ERROR'+status);
                });
        };
于 2013-10-06T19:08:36.350 回答