尝试制作一个简单的小部件。 步骤:
1) 加载 jQuery(如果尚未存在) 2)回调函数
<html>
<head>
<script type="text/javascript">
function load(callback){
console.log('load');
if (typeof jQuery !== "function") {
var js = document.createElement("script");
var he = document.getElementsByTagName('head')[0];
js.type = "text/javascript";
js.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js";
he.appendChild(js);
js.addEventListener("load", function () {
callback();
});
}
else
{
callback();
}
}
load(function(){
chart();
})
function chart(){
$('#chart').html("id : "+Math.random());
}
// alert('This alert breaks!');
</script>
</head>
<body>
<div id="chart"></div>
</body>
</html>
代码可以在没有警报的情况下运行。无法理解上下文问题
谢谢
最佳答案
好的,问题解决了。
您的代码不在 DOM 就绪处理程序内。
如果警报不存在,它将起作用,因为函数调用是异步的,并且 DOM 在 AJAX 完成之前就已准备好。
但是当警报出现时,它会在您的代码中创建一个断点,并且在您单击确定之前,DOM 不会完成。问题是 AJAX 请求没有停止。当您单击确定时,AJAX 将完成并在 DOM 准备就绪之前运行回调。
关于javascript回调上下文问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21124324/