默认情况下,$resource
服务会对它进行的 http 请求的 response 默认进行一些处理,它会尝试 map 返回值。
如果你的服务器端返回的值符合标准 json 格式,那么不会遇到问题,但是如果你的服务器返回了类似 12
或者 abc
这样子的数据时,你就会发现当你在回调中试图获取 response 时,发生了一些意想不到的事情。
你实际获得的结果可能是这样子的:
{
"0": "1",
"1": "2",
$promise: obj,
...
}
{
"0": "a",
"1": "b",
"2": "c",
$promise: obj,
...
}
你得到的值已经是被错误的 map 过了。这当然不是我们想要的,因此,我们需要手动来处理一下。
所以,我们在 $resource
的对应 action
中指定一下 transformResponse
参数。
顾名思义,transformResponse
就是用来指定对 response
的处理方法的,它接受一个方法或者一个由多个方法组成的数组作为值。
function(data, headersGetter)|Array.<function(data, headersGetter)>
因此我们给 $resource
的某个 action 下添加如下一个参数。
transformResponse: function (response) {
return {data: response};
}
最终的结构是这样子的:
$resource('/api/test', {}, {
save: {
method: 'POST',
transformResponse: function(response) {
return {
data: response
};
}
}
});
这样我们就可以在对应的 action (这里是 save 方法) 的回调中取得我们想要的 response 了。
假设你在回调函数中使用 response 作为回调变量名,你可以通过 response.data
来获取真实的 response,它不会再被 angular 自动处理了。