javascript:一旦变量更新,函数将在稍后的时间执行

时间:2011-11-13 11:34:06

标签: javascript function

这是Javascript在单个线程上线性执行的问题。

使用

  setTimeout(function(){},time);

立即评估并执行function()

我正在寻找一种在x秒内执行function()的方法,例如在从ajax调用更新dom之后。

这是怎么做到的?

换句话说,只需要“暂停”脚本然后让它知道何时执行。

为清楚起见,如果你在函数();

中做了类似的事情
      var a= document.getElementbyId("anid").innerHTML;

var a将在处理setInterval时收集,而不是在执行函数时的x秒内收集。

...谢谢

2 个答案:

答案 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');
}