除非调用alert(),否则不会设置异步回调中设置的值

value set in async callback is not set unless alert() is invoked?

本文关键字:设置 异步 回调 alert 调用      更新时间:2023-09-26

HTMLdiv

<div id="viz"></div>

javascript

<script type="text/javascript">
var gg=document.getElementById("viz");
function ex(nn) {
    var zzz;
    d3.xml("./xyzfiles/svgs/s"+nn+".svg", "image/svg+xml", function(xml) {
        zzz=xml.documentElement;
    });
    if(q==null) {
        alert("no child");
    } else {
        alert("has child");
    }
    gg.appendChild(zzz);
}
ex(1);    
ex(6);
</script>   

我有svg文件s1.svg,s2.svg…。当我使用alert()函数时,它们正在加载,但当我像下面的一样删除时

<script type="text/javascript">
var gg=document.getElementById("viz");
function ex(nn) {
    var zzz;
    d3.xml("./xyzfiles/svgs/s"+nn+".svg", "image/svg+xml", function(xml) {
        zzz=xml.documentElement;
    });
    gg.appendChild(zzz);
}
ex(1);    
ex(6);
</script>   

ex(1)、ex(6)没有被执行。为什么会发生这种情况,先生,有没有什么无声的方法来刷新DOM,这样就可以在没有alert()的情况下执行ex()。

在返回d3.xml调用之前追加zzz。您需要在回调中执行此操作。该警报导致浏览器停止,因此异步调用在追加时已完成。使用console.log而不是alert将提供线索。

顺便问一下,q应该是干什么的?

关于这个话题,SO上有六个问题。请参阅如何从异步调用返回响应?,$.getJSON函数期间设置的变量只能在函数内访问,为什么我的变量在函数内修改后没有改变?-异步代码引用,从fs.readFile.获取数据