You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS:$resource期望接收数组反序列化,实际获对象的转换方法

解决AngularJS $resource保存数据为数组格式的问题

核心思路:将单个对象包装为数组并正确序列化

后端期望接收数组格式的数据,你当前传递的是单个对象或URL编码字符串,可根据后端接收格式选择以下方案:

场景1:后端接收JSON格式的数组

直接在$resource服务中统一处理请求体,将单个对象包装为数组并序列化为JSON:

修改你的PessoasSrv服务,为save和update方法添加请求转换逻辑:

pessoas.factory("PessoasSrv", function ($http, $resource) {
    var baseUrl = "http://localhost/sisgestorv2/";

    return $resource(
        baseUrl + "contato/:id",
        {
            id: "@id",
        },
        {
            query: {
                method: "GET",
                isArray: true,
            },
            update: {
                method: "PUT",
                url: baseUrl + "contato/update/:id",
                transformRequest: function(data) {
                    // 将单个对象包装为数组后序列化为JSON
                    return angular.toJson([data]);
                },
                headers: {'Content-Type': 'application/json'}
            },
            save: {
                method: "POST",
                transformRequest: function(data) {
                    return angular.toJson([data]);
                },
                headers: {'Content-Type': 'application/json'}
            },
            remove: {
                method: "DELETE",
                url: baseUrl + "contato/delete/:id",
            },
        }
    );
})
  • transformRequest:AngularJS请求转换钩子,自动将传入的单个对象包装为数组,再用angular.toJson()序列化为JSON字符串(比原生JSON.stringify更适配AngularJS对象)。
  • headers:明确告知后端请求体为JSON格式,避免默认的form-data编码。

场景2:后端接收URL编码的数组(如nome[]=xxx格式)

如果后端期望form-data格式的数组参数,使用jQuery.param时需添加traditional: true参数:

var arrayData = [item];
var encodedStr = jQuery.param(arrayData, true);

这会生成类似nome[]=angularjs&telefone[]=%2B556639687898的URL编码字符串,符合后端对数组格式的解析要求。

关于JSON.parse()无效的说明

JSON.parse()的作用是将JSON字符串解析为对象/数组,而你当前需要的是将对象转换为数组并序列化为字符串,因此使用angular.toJson()或JSON.stringify()才是正确方向。

内容的提问来源于stack exchange,提问作者Braga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 16:58:32