Javascript Angular$resource JSON回调不起作用-这是最佳实践吗?
我正在创建一个资源,将数据传递到我的控制器中,用于需要挂接到的现有api。很遗憾,我无法修改后端 我的资源工厂当前看起来如下所示: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'
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;
}
}