首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待AJAX调用链的完成

等待AJAX调用链的完成
EN

Stack Overflow用户
提问于 2015-09-23 15:25:56
回答 2查看 550关注 0票数 2

我有一个函数,它调用具有AJAX请求的其他函数。我希望在调用最后一个函数之前完成所有AJAX调用。我初始化一个数组,并需要所有AJAX调用在进入最后一步之前都已成功完成。当我在浏览器中运行代码时,控制台将显示在完成第一个AJAX调用之前正在调用的最后一个方法。我尝试过使用.done,但是仍然得到了相同的结果。

代码语言:javascript
复制
function Search() {
       var userIds = [];
       var certName = $('#certificationName').val();
       var skillNumberOne = $('#skillName1').val();
       var skillNumberTwo = $('#skillName2').val();
       var skillNumberThree = $('#skillName3').val();
       var locale = $('#location').val();
       CertMatchResults(certName, userIds);
       SkillMatchResults(skillNumberOne, userIds);
       SkillMatchResults(skillNumberTwo, userIds);
       SkillMatchResults(skillNumberThree, userIds);
       LocationMatchResults(locale, userIds);
       console.log(userIds);
       DisplayMatches(userIds);
    }

    function CertMatchResults(certName, userIds) {
       if (certName == '') return;
       $.getJSON('json_data.php', { method: 'matchCerts', certName: certName }, function(data) {
          $.each(data, function(key, value) {
             console.log("Cert Match >>> " + value.user_id);
             userIds.push(value.user_id);
          });
       }).done(function() {
          console.log("Cert match completed.");
       });
    }

    function SkillMatchResults(skillName, userIds) {
       if (skillName == '') return;
       $.getJSON('json_data.php', { method: 'matchSkill', skillName: skillName }, function(data) {
          $.each(data, function(key, value) {
             console.log("Skill Match >>> " + value.user_id);
             userIds.push(value.user_id);
          });
       });
    }
... other calls below ... I can add them if needed

DisplayMatches需要完成前面每个函数中的所有AJAX调用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-23 15:31:56

让所有函数在完成时调用DisplayMatches,并检查userIDs数组是否完成.当你知道一切都已经完成时,你只需运行它,如果不是,退出

票数 1
EN

Stack Overflow用户

发布于 2015-09-23 15:33:59

您应该创建一个延迟对象链。

每个ajax调用返回延迟对象,然后您可以将它们收集到jQuery.when函数中,并在所有ajax调用解决了它们在jQuery.then函数中的承诺后调用最后一个函数。

代码语言:javascript
复制
$.when( $.getJson("url1"), $.getJson("url2") ).then(function( valueFromUrl1, valueFromUrl2 ) {
  functionThatShouldBeInvokedLast();
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32743618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档