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

AngularJS中合并POST响应与输入JSON实现二次POST请求的问题

解决AngularJS中合并POST响应与输入JSON发起二次请求的问题

我明白你要做的事啦——在AngularJS里先发起一次POST请求,拿到响应后把它和最初的输入JSON合并,再发第二次POST对吧?看你给的代码片段,我帮你调整实现这个逻辑:

修改后的完整代码示例

$scope.master = {};
$scope.addChild = function(net) {
  // 拷贝初始输入的JSON,避免修改原数据
  $scope.master = angular.copy(net);
  
  // 第一次POST请求
  $http.post("first-url", $scope.master)
    .then(function(response) {
      // 划重点:$http的响应对象里,实际返回的数据存在response.data中
      $scope.childData = response.data;
      $scope.dataName = $scope.master.Name;
      growl.success("Created a new Child");
      console.log("第一次请求响应数据:", $scope.childData);
      
      // 合并初始JSON和响应数据
      // 用angular.merge做深合并(嵌套对象也会合并),并且不修改原master对象
      const mergedData = angular.merge({}, $scope.master, $scope.childData);
      // 如果你的数据都是扁平结构,也可以用浅合并:const mergedData = Object.assign({}, $scope.master, $scope.childData);
      
      console.log("合并后的数据:", mergedData);
      
      // 发起第二次POST请求
      $http.post("second-url", mergedData)
        .then(function(secondResponse) {
          growl.success("第二次请求提交成功");
          console.log("第二次请求响应结果:", secondResponse.data);
        }, function(error) {
          growl.error("第二次请求失败");
          console.error("第二次请求错误详情:", error);
        });
    }, function(error) {
      growl.error("Something went wrong");
      console.error("第一次请求错误详情:", error);
    });
};

几个关键注意点

  • 异步请求顺序:第二次请求必须放在第一次请求的成功回调里,因为HTTP请求是异步的,否则会出现第一次请求还没返回数据就发起第二次请求的情况
  • 响应数据的正确获取:你原来的代码直接用data参数,其实这个参数是整个响应对象(包含status、headers等),实际接口返回的数据在response.data里,这是AngularJS $http的常见坑
  • 对象合并的选择:
    • angular.merge()是深合并,适合处理嵌套的JSON结构,会递归合并所有层级的属性
    • Object.assign()是浅合并,只合并第一层属性,如果你的数据是扁平结构可以用这个

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:58:54