我有一些类似的代码:
function myFunction(){
$('#somediv').html("Making request...");
$.get('/script.php',
function(data){
if(data.error == 0){
$('#somediv').html("yay!");
} else {
$('#somediv').html("oops!");
window.setTimeout(myFunction(), 2000);
}
},
'json');
}
" oops!"从不显示,我相信可能是因为$ .get()请求是异步调用的。我可以显示的唯一方法是将它包装在window.setTimeout()中或在它之前运行alert()。
答案 0 :(得分:0)
逐行跟踪您的代码,您就会明白发生了什么。
function myFunction(){
$('#somediv').html("Making request...");
$.get('/script.php',
function(data){
if(data.error == 0){
$('#somediv').html("yay!");
} else {
$('#somediv').html("oops!");
myFunction();
}
},
'json');
}
$('#somediv').html("Making request...");
$.get()
// waiting for ajax request...
$('#somediv').html("oops!");
$('#somediv').html("Making request...");
步骤4和5最有可能在0.01毫秒内发生,这就是为什么你永远不会看到“哎呀!”。
您可以在myfunction
周围使用settimeout来显示oops,但最好不要显示任何内容,以便继续说“Making Request ...”。
答案 1 :(得分:0)
使用:
window.setTimeout(myFunction, 2000);
而不是
window.setTimeout(myFunction(), 2000)
window.setTimeout(myFunction(), 2000);
调用myFunction()
,与window.setTimeout(undefined, 2000)
相同,因为myFunction()
会返回undefined
。
但是当调用myFunction
时,您使用$('#somediv').html("Making request...");
重写html。