Javascript AngularJS、$http和transformResponse

Javascript AngularJS、$http和transformResponse,javascript,angularjs,Javascript,Angularjs,我对AngularJS的$http有一种奇怪的行为,但并不真正理解transformResponse是如何工作的(文档对此有点轻描淡写) api返回一个对象数组: [{"webasset_name": "...", "application_id": "...", "etc": "..."}, ... ] 但是,当transformResponse完成它的邪恶业务时,数据已转换为索引对象: {"0":{"webasset_name":"...","application_id":"...",

我对AngularJS的$http有一种奇怪的行为,但并不真正理解transformResponse是如何工作的(文档对此有点轻描淡写)

api返回一个对象数组:

[{"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) }
    }