Javascript AngularJS、$http和transformResponse
我对AngularJS的$http有一种奇怪的行为,但并不真正理解transformResponse是如何工作的(文档对此有点轻描淡写) api返回一个对象数组:Javascript AngularJS、$http和transformResponse,javascript,angularjs,Javascript,Angularjs,我对AngularJS的$http有一种奇怪的行为,但并不真正理解transformResponse是如何工作的(文档对此有点轻描淡写) api返回一个对象数组: [{"webasset_name": "...", "application_id": "...", "etc": "..."}, ... ] 但是,当transformResponse完成它的邪恶业务时,数据已转换为索引对象: {"0":{"webasset_name":"...","application_id":"...",
[{"webasset_name": "...", "application_id": "...", "etc": "..."}, ... ]
但是,当transformResponse完成它的邪恶业务时,数据已转换为索引对象:
{"0":{"webasset_name":"...","application_id":"...", "etc": "..."}, "1":....}
我希望保留原始数据结构(一个对象数组)。要使数据不转换为对象,需要覆盖默认$httpProvider.defaults.transformResponse的行为。它实际上是一组变压器。 您可以将其设置为空:
$http.defaults.transformResponse=[]代码>
下面是我用来将64位长整数转换为字符串的示例转换器:
function longsToStrings(response) {
//console.log("transforming response");
var numbers = /("[^"]*":\s*)(\d{15,})([,}])/g;
var newResponse = response.replace(numbers, "$1\"$2\"$3");
return newResponse;
}
要将转换器添加到默认列表,可以在JSON反序列化器之前执行以下操作:
$http.defaults.transformResponse.unshift(longsToStrings);
资源0:“f”1:“a”2:“l”3:“s”4:“e”
这终于对我起了作用:
transformResponse: function (data, headersGetter) {
return { isCorrect: angular.fromJson(data) }
}
尝试使用资源查询方法
您可能想看看这里:他们使用的是$resource,我使用的是$http。我想您需要做的是通知$http您返回的是数组而不是object。您可以用一些示例代码扩展您的答案吗?看到代码和描述总是更清晰。你可以选择你的答案。顺便问一下,你为什么要创建两个帐户?
transformResponse: function (data, headersGetter) {
return { isCorrect: angular.fromJson(data) }
}