Angularjs循环$ http.post

 下个路口见的 发布于 2023-02-04 19:59

当我遍历Angularjs的$ http post服务时

for (var i = 0; i < $scope.tagStyles.length; i++) {
  $scope.profilTag.tag = $scope.tagStyles[i].id_tag;
  $scope.profilTag.texte = $scope.tagStyles[i].style ;
  $scope.profilTag.profil = lastDocId;

  $http.post('/ajouterProfilTag',$scope.profilTag) 
  .success(function(data){ 
    if (data=='err'){ 
      console.log("oops"); 
    }     
  });
};

我只得到数据库中的最后一个元素.它是否与异步调用有关?

2 个回答
  • 您可能想要使用AngularJs promise API.

    var promiseArray = [];
    
    for (/*your loop statements*/) {
     promiseArray.push($http.post('/url', $scope.var));
    }
    
    $q.all(promiseArray).then(function(dataArray) {
        // Each element of dataArray corresponds to each result of http request.
    });
    

    请参阅$ http服务文档中的 Usage-> returns部分,以了解通过dataArray参数返回的内容.

    2023-02-04 20:01 回答
  • $ http docs:

    The $http service will not actually send the request until the next $digest() is executed.

    可能发生的是$ scope.profilTag通过引用传递给$ http并且仅在$ digest之后发送.您可以在每次迭代时覆盖该引用,这就是您只留下最后一项的原因.

    请注意,函数具有范围,但循环不具有!

    试试这个:

    $scope.tagStyles.forEach(function(item){
      var profilTag = {
        tag: item.id_tag,
        texte: item.style,
        profil: lastDocId,
      };
    
      $http.post('/ajouterProfilTag',profilTag) 
      .success(function(data) { 
        if (data=='err'){ 
          console.log("oops"); 
        }
      });
    
    });
    

    2023-02-04 20:02 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有