首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery -等待函数返回,然后继续

jQuery -等待函数返回,然后继续
EN

Stack Overflow用户
提问于 2013-10-04 06:42:57
回答 3查看 9.3K关注 0票数 1

当我更新到1.10.2版时,我开始对jQuery产生一些问题。

我一直在寻找答案,但这些方法似乎都没有用,我可能做错了什么。我真的很感谢你的帮助。

主要的问题是,单击事件并不等待validateAjax的结果,而只是说validateBaan是未定义的。我已经检查了validateAjax函数,输出的值为true或false,但我想到那时,单击事件已经转移。我希望单击事件等待validateAjax结果,然后继续。

单击事件:

代码语言:javascript
运行
复制
$('#log-in').on('click', function() {

    // triggers validateAjax
    var validateBaan = validateAjax('fieldId', 'worker');

    // every time I log it says undefined, even though it gets value 
    // (true or false), but too late
    // console.log(validateBaan);

    // this function works
    var validateShift = checkInput({
        shift: {
            field: 'btn-group',
            hasClass: 'active',
            error: 'shifterror'
        }
    });
    // when both are true take some action
    if (validateBaan && validateShift) {
        ...
    }
});

下面是validateAjax函数:

代码语言:javascript
运行
复制
function validateAjax(fieldId, query) {

   var output;

   // field value
   var fieldValue = $('#' + fieldId).val();

   // sending ajax request
   var ajaxQuery = $.ajax({
     type: "GET",
     url: "update.php",
     data: 'checkup=checkup&baan=' + fieldValue
    });

   // based on the response, takes action
   ajaxQuery.done(function(response) {
      if (response.error) {
          output = false;
          $('.error-' + fieldId).html(response.error);
       } else if (response.product) {
          $.cookie('tab_name', response.product);
          output = true;
       } else {
          output = true;
       }
       return output;
   });
}

我尝试过在/那时使用jQuery,但是我没有设法让它正常工作。

在以前的jQuery版本中,我从来没有遇到过这样的问题,所以我会感谢所有的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-04 06:49:34

您可以使用回调函数,例如

代码语言:javascript
运行
复制
$('#log-in').on('click', function() {

    // triggers validateAjax
    // pass anonymus function to be called when ajax is complete
    var validateBaan = validateAjax('fieldId', 'worker', function(){

        // every time I log it says undefined, even though it gets value 
        // (true or false), but too late
        // console.log(validateBaan);

        // this function works
        var validateShift = checkInput({
            shift: {
                field: 'btn-group',
                hasClass: 'active',
                error: 'shifterror'
            }
        });
        // when both are true take some action
        if (validateShift) {
            ...
        }   
    });
});


function validateAjax(fieldId, query, callback) {
    var output;

   // field value
   var fieldValue = $('#' + fieldId).val();

   // sending ajax request
   var ajaxQuery = $.ajax({
     type: "GET",
     url: "update.php",
     data: 'checkup=checkup&baan=' + fieldValue
    });

   // based on the response, takes action
   ajaxQuery.done(function(response) {
      if (response.error) {
          output = false;
          $('.error-' + fieldId).html(response.error);
       } else if (response.product) {
          $.cookie('tab_name', response.product);

          //Call you function if condition is trure
          callback();
       }
   });
}
票数 3
EN

Stack Overflow用户

发布于 2013-10-04 06:47:14

这是一个ajax,那么您可以尝试使用async: false

设置async to false意味着调用的语句必须在调用函数中的下一个语句之前完成。

由于不推荐,最有效的方法是使用callback函数来处理它。

票数 0
EN

Stack Overflow用户

发布于 2013-10-04 06:47:25

将异步设置为false:

代码语言:javascript
运行
复制
var ajaxQuery = $.ajax({
 async: false,
 type: "GET",
 url: "update.php",
 data: 'checkup=checkup&baan=' + fieldValue
});

这将等待ajax命令完成,然后再使用您的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19174931

复制
相关文章

相似问题

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