使用AngularJS $资源的jsonp请求

时间:2012-11-05 14:52:46

标签: javascript angularjs

我在AngularJS中定义了以下两项服务。两者都应该返回JSONP,因为我正在做跨域请求。

服务A:

angular.module('ServiceA', ['ngResource']).
  factory('A', function ($resource) {
     return $resource('url/offers', {},
       {
         get: { method: 'JSONP', params: {property_code: 'DEMO_ERFOLGX', adults: '2',
                callback: 'JSON_CALLBACK'} }
       }
    );
  });

服务B:

angular.module('ServiceB', ['ngResource']).
  factory('B', function ($resource) {
     return $resource('url/search.json', {},
       {
         get: { method: 'JSONP', params: {property_code: 'DEMO_ERFOLGX', adults: '2',
                callback: 'JSON_CALLBACK'} }
       }
    );
  });

在我的Controller中,我将结果绑定到我的范围:

$scope.foo = A.get();  
$scope.bar = B.get();

根据我的console.log()输出,B以JSON格式返回预期结果,而A返回如下内容:

SyntaxError: invalid label
{"DEMO_ERFOLGX":{"offers":[{"checkin":"2012-12-01","checkout"

我错过了什么吗?我需要做什么才能从A接收正确的JSON?

1 个答案:

答案 0 :(得分:12)

您的代码看起来令人困惑。这两个服务都被称为A,但您使用不同的模块名称。除此之外,你的第二个服务调用JSON文件而第一个服务不是吗?

我会尝试以下方法:

angular.module('app.services', ['ngResource'])
  .factory('ServiceA', function ($resource) {
     return $resource('url/offers', {},
       {
         get: { method: 'JSONP', params: {property_code: 'DEMO_ERFOLGX', adults: '2',
                callback: 'JSON_CALLBACK'} }
       }
    );
  });
  .factory('ServiceB', function ($resource) {
     return $resource('url/search.json', {},
       {
         get: { method: 'JSONP', params: {property_code: 'DEMO_ERFOLGX', adults: '2',
                callback: 'JSON_CALLBACK'} }
       }
    );
  });