【问题标题】:value set in async callback is not set unless alert() is invoked? [duplicate]除非调用 alert(),否则不会设置异步回调中设置的值? [复制]
【发布时间】:2014-11-08 11:52:41
【问题描述】:

一个 HTML div

<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,以便 ex() 可以在没有 alert() 的情况下执行。

【问题讨论】:

    标签: javascript html asynchronous d3.js


    【解决方案1】:

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

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

    关于这个主题有很多关于 SO 的问题。见How do I return the response from an asynchronous call?Variables set during $.getJSON function only accessible within functionWhy is my variable unaltered after I modify it inside of a function? - Asynchronous code referenceGet data from fs.readFile

    【讨论】:

    • 解决了@torazaburo先生
    • 对不起先生我想删除以前的孩子,如果它有并加载新的svg。
    • 最简单的方法可能是gg.deleteChild(gg.firstChild)
    猜你喜欢
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多