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
相关产品推荐
相关产品推荐

