Javascript Angular$resource JSON回调不起作用-这是最佳实践吗?

Javascript Angular$resource JSON回调不起作用-这是最佳实践吗?,javascript,json,angularjs,Javascript,Json,Angularjs,我正在创建一个资源,将数据传递到我的控制器中,用于需要挂接到的现有api。很遗憾,我无法修改后端 我的资源工厂当前看起来如下所示: Person.queryAll(function (result) { angular.isArray(result); // should be true }, function (error) { //doh! } "严格使用", angular.module('XXX') .factory('elements'

我正在创建一个资源,将数据传递到我的控制器中,用于需要挂接到的现有api。很遗憾,我无法修改后端

我的资源工厂当前看起来如下所示:

Person.queryAll(function (result) {
   angular.isArray(result); // should be true
}, function (error) 
{
    //doh!
}
"严格使用",

        angular.module('XXX')
        .factory('elements', function (
            $resource
        ) {
            return $resource('http://XXX/api/v1/elements/:id',
                {
                    callback: 'JSON_CALLBACK',
                    id: '@id'
                },
                {
                    query: {
                        method: 'JSONP',
                        params: {
                            id: '@id'
                        }
                    },
                    all: {
                        method: 'JSONP',
                        params: {}
                    }
                }
            );
        });
elements.query()工作正常,但遗憾的是elements.all()不工作。我注意到在我的网络选项卡中返回的内容中,以angular.callbacks开头

更新

好的,我用它来处理这个问题:

    angular.module('XXX')
    .factory('element', function (
        $resource
    ) {
        return $resource('http://XXX/api/v1/elements/:id',
            {
                id: '@id',
                        callback : 'JSON_CALLBACK',
            },
            {
                query: {
                    method: 'JSONP',
                    params: {
                        id: '@id'
                    }
                },
                all: {
                    method: 'JSONP',
                    isArray: true,
                    params: {
                        callback : 'JSON_CALLBACK',
                    }
                }
            }
        );
    });

但是,它返回到控制台的json是作为数组的。。我能够解析它以供使用,但现在想知道这是否是最佳实践?

通常,$resource用于RESTful API。JSONP只使用GET

因此,我将使用$http.JSONP,而不是$resource


在你的代码中,你能让你的服务器端支持CORS吗?

这就是iArray的用意。 您需要isArray标志,因为angular必须在发送请求之前创建一个空对象(在本例中为数组)。因此,所有绑定都可以工作,因为您具有相同的引用。当结果到达时,它将被填充到变量result object/array中

我们正在进行这样的服务呼叫,也许它会帮助您:

.factory('Person', function($resource, AppConfig) {
   var Person = $resource(AppConfig.remoteURL + '/person/:id', {}, {
      query: {method:'GET'},
      queryAll: {method:'GET', isArray: true},
      create: {method:'POST'},
      update: {method: 'PUT'}});

   return Person;
});
这样称呼它:

Person.queryAll(function (result) {
   angular.isArray(result); // should be true
}, function (error) 
{
    //doh!
}

您可能希望指定一个自定义transformResponse来转换并从数组表单中提取数据

摘自:

transformResponse–{函数(数据、HeaderGetter)|数组。}
–转换函数或此类函数的数组。transform函数接受http响应体和头并返回其转换(通常是反序列化)版本

因此,您的代码应该大致如下:

all: {
  method: 'JSONP',
  isArray: true,
  params: {
    callback : 'JSON_CALLBACK',
  },
  transformResponse: function(data, headersGetter) {
     return data.[....].DATA;
  }
}