这是Javascript在单个线程上线性执行的问题。
使用
setTimeout(function(){},time);
立即评估并执行function()
。
我正在寻找一种在x秒内执行function()
的方法,例如在从ajax调用更新dom之后。
这是怎么做到的?
换句话说,只需要“暂停”脚本然后让它知道何时执行。
为清楚起见,如果你在函数();
中做了类似的事情 var a= document.getElementbyId("anid").innerHTML;
var a将在处理setInterval时收集,而不是在执行函数时的x秒内收集。
...谢谢
答案 0 :(得分:2)
最好在ajax调用完成后执行你的函数。您可以注册成功/失败函数,该函数将在调用完成后调用。这是正确的做法。
这是jquery的一个例子:
$.ajax({
url: "test.html",
context: document.body,
success: function(){
// here you do whatever you want after ajax is finished
}
});
**编辑** 根据Quentin的评论删除了将回调函数作为字符串传递的建议,因为这确实不是一个好习惯。
答案 1 :(得分:2)
setTimeout的示例不会立即执行该函数,而是在等待'time'指定的毫秒数之后。例如,要在3秒内显示警报:
window.setTimeout ( function() { alert ('Test'); }, 3000);
请注意,即使您使用0作为时间值,execution of the function is still delayed until the current Javascript execution stack ends,在某些情况下也很有用,但在您的情况下则不然。
正如santiagoIT所说,你永远不应该依赖这种策略来执行任何依赖于已经完成的特定AJAX调用的动作。相反,您应该使用回调函数。这是因为在使用计时器时,DOM在执行函数时仍然没有准备就绪(例如,如果计算机运行缓慢),这种线程问题在计算机科学中称为“竞争条件”。
要避免竞争条件,请使用回调函数。使用jQuery库的示例如下所示:
$.get("/url/ajax/getSomething", parameterArray, callbackFunction);
function callbackFunction(data) {
alert ('Work with DOM here');
}