Javascript .html()在异步代码中不起作用
我有一些类似这样的代码:Javascript .html()在异步代码中不起作用,javascript,jquery,asynchronous,callback,Javascript,Jquery,Asynchronous,Callback,我有一些类似这样的代码: function myFunction(){ $('#somediv').html("Making request..."); $.get('/script.php', function(data){ if(data.error == 0){ $('#somediv').html("yay!"); } else { $('#so
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()请求。我能让它显示出来的唯一方法是将它包装在一个窗口中。setTimeout()或在它之前运行一个alert()。逐行跟踪您的代码,您就会明白发生了什么
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(“提出请求…”)代码>
$.get()
//正在等待ajax请求…
$('somediv').html(“oops!”)代码>
$('#somediv').html(“提出请求…”)代码>
myfunction
周围使用settimeout使oops可见,但最好不要显示任何内容,这样它就会继续说“发出请求…”。使用:
window.setTimeout(myFunction, 2000);
而不是
window.setTimeout(myFunction(), 2000)
window.setTimeout(myFunction(),2000)
调用myFunction()
和:window.setTimeout(undefined,2000)
一样,因为myFunction()
返回undefined
但是当调用
myFunction
时,您可以使用$('#somediv').html(“发出请求…”)重写html代码>“oops”从不显示???$(“#somediv”).html(“oops!”);您确定确实调用了success方法吗?您将立即重新执行myfunction,它会立即将其html设置为“Making Request…”,再次删除“oops”。请按照代码一行一行地开始调试。请参阅@IonicăBizău的答案。嘿,谢谢。我想到了这一点,并添加了一个window.setTimeout()(我忘了在示例代码中包含它。但是,问题仍然存在。