作为调试/学习工具,我将其插入到我的代码中:
$(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事件吗?
答案 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);
}
})