gpt4 book ai didi

javascript - AngularJS、$http 和 transformResponse

转载 作者:可可西里 更新时间:2023-11-01 02:19:27 24 4
gpt4 key购买 nike

我在使用 AngularJS 的 $http 时遇到了一个奇怪的行为,并且没有真正理解 transformResponse 是如何工作的(文档对这个有点浅显)。

    WebAssets.get = function () {
return $http.get('/api/webassets/list', {
transformResponse: [function (data, headersGetter) {
// not sure what to do here?!
return data;
}].concat($http.defaults.transformResponse) // presume this isn't needed, added for clarity
}).then(function (response) {
return new WebAssets(response.data);
});
};

api 返回一个对象数组:

[{"webasset_name": "...", "application_id": "...", "etc": "..."}, ... ]

但是当 transformResponse 完成它时,数据已经转换为索引对象:

{"0":{"webasset_name":"...","application_id":"...", "etc": "..."}, "1":....}

我想保留原始数据结构(对象数组)。

最佳答案

要使 Angular 不将您的数据转换为对象,您需要覆盖默认 $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);

关于javascript - AngularJS、$http 和 transformResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18147126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com