繁体   English   中英

ajaxSuccess事件触发序列

[英]ajaxSuccess event firing sequence

作为调试/学习工具,我将其插入代码中:

$(document).ajaxSuccess(function() {
    console.log('ajax complete');
});

我想看看ajax使用console.log()获得与其他事件相关的答案的地方。

所以我有:

function place_confirm (place_name,place_code) {
    console.log('into place_confirm');
    var place_confirm_html= '<p>confermi da '+place_name+ '?</p>';
    //here the function does other stuff
}

$.post('./shyne/ajax/approve.php', {place_code:place_code}, function (data){
    if (data == '_no_'){$('.error').html('il codice non è corretto');
    } else {
        place_confirm(data,place_code);
}

对我来说,奇怪的是console.log写道:

到位确认

阿贾克斯完成

虽然我认为这必须是相反的: ajax完成后,我才能成功运行我的功能。

所以我有两个问题:

  1. 控制台能否很好地表示事件的发生顺序?

  2. 哪个是正确的ajax事件,以附加仅在Ajax得到响应后才执行的功能?

因为Ajax调用是异步的,所以将在ajaxSuccess之前触发place_confirm函数。 因此,当JavaScrpt文件正在等待Ajax响应时,它将执行其他功能。 这就是为什么该函数将首先执行的原因。

如果希望先执行ajaxSuccess函数,则需要将async设置为false,如下所示:

$.ajax({
    async: false,
    ....
})
.done(function(response){
    //Some Logic here if the Ajax succeded     
})
.fail(function(jqXHR, textStatus, errorThrown){
    alert('Error : ' + errorThrown); // error handling
});

但是请注意:如果将async设置为false,则在AjaxResponse到来之前,务必不要执行其他代码! 它将像单编程语言一样工作!

顺便说一句,上面的代码是正确处理Ajax调用的新方法,在更高版本中不建议使用“成功与错误”的旧方法,仅供参考:)

控制台可以为您提供良好的信息,但是只能提供很多信息。 console.log()无法为您提供有关为什么按功能执行顺序调用函数的信息,但是您会看到它们按顺序执行。 第一句中解释了这种行为的原因,如果您想了解更多信息,请询问。 :)

对不起,可能语法错误!

编辑:

欢迎来到堆栈溢出:)

据我所知, $.post函数采用以下参数(URL, dataToPass, successFunction) 因此,您正在执行的操作是成功调用place_confirm函数,该函数将在您使用的另一个ajaxSuccess函数之前首先被调用。 因此,回答您的问题:

1.是,顺序正确。

2.您可以使用done()事件。

$.post('./shyne/ajax/approve.php', {place_code:place_code})
   .done( function (data){
      if (data == '_no_'){
         $('.error').html('il codice non è corretto');
      } else {
         place_confirm(data,place_code);
      }
   })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM