Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript .html()在异步代码中不起作用_Javascript_Jquery_Asynchronous_Callback - Fatal编程技术网

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(“提出请求…”)
  • 第4步和第5步最有可能发生在.01毫秒内,这就是为什么您从未看到“oops!”

    您可以在
    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()(我忘了在示例代码中包含它。但是,问题仍然存在。