除非调用alert(),否则不会设置异步回调中设置的值
value set in async callback is not set unless alert() is invoked?
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.获取数据
相关文章:
- angular 1.3中的ng选项在集合异步设置时忘记了ng模型
- 如何在Angular中设置异步HTTP服务的回调,以便在不定义数组的情况下在控制器中填充数组
- 为什么在定义回调/侦听器函数(异步消息传递,port.on)后没有立即设置全局变量
- AngularJS UI-if 状态变量设置值异步
- 具有异步设置属性的 JS 对象
- 设置同步/异步函数序列的正确方法,所有这些函数都可以停止表单提交和进一步处理
- AJAX 异步设置为 false 阻止页面,否则无法获取该值
- 如何通过异步xmlhttprequest响应设置变量
- 如何在调用异步Web服务响应时将值设置为数组
- 如何从异步回调中设置对象变量
- 在异步调用返回后设置计时器
- 异步设置变量使用promise并避免回调
- 动态异步加载CSS(通过在Javascript中设置“href”属性)
- 除非调用alert(),否则不会设置异步回调中设置的值
- Internet测试框架异步设置
- 从异步函数设置对象值
- 以异步方式向前端web应用程序添加设置文件
- 通过Node异步调用设置变量的正确模式
- 异步设置ReactJS状态
- 设置异步函数的全局变量