[英]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完成后,我才能成功运行我的功能。
所以我有两个问题:
控制台能否很好地表示事件的发生顺序?
哪个是正确的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.