ajaxSuccess事件触发序列

时间:2014-05-02 07:24:46

标签: javascript php jquery ajax

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

$(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完成

虽然我认为它必须是相反的:在 ajax完成之后,我的功能在成功中运行。

所以我有两个问题:

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

  2. 这是附加一个我希望在Ajax得到响应之后执行的函数的正确的ajax事件吗?

2 个答案:

答案 0 :(得分:0)

函数place_confirm将在ajaxSuccess之前触发,因为Ajax调用是异步的。因此,当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到达之前,Javascript绝不能执行其他代码!它将像单一的编程语言一样工作!

上面的代码是正确处理Ajax调用的新方法,在新版本中不推荐使用Success und Error的旧方法,仅供参考:)

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

对不起可能的语法错误!

编辑:

欢迎使用堆栈溢出:)

答案 1 :(得分:0)

据我所知,$.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);
      }
   })