停止执行一些JavaScript代码

时间:2012-07-04 12:15:24

标签: javascript jquery ajax

我有多个ajax请求,javascript代码作为响应,我需要在加载新代码后停止执行previos javascript代码,我的意思是停止间隔,函数,超时......

我的代码:

$.get("/ucmd", params, function(data) {
  var $data = document.createElement("div");
  $data.innerHTML = data;
  var em = $data.getElementsByTagName("*");
  for(var i=0;i<em.length;i++)
  {
    if(em[i].tagName === "SCRIPT")
    {
     if($("#"+em[i].id)) document.body.removeChild($("#"+em[i].id));
     var script = document.createElement("script");
     script.id = em[i].id;
     script.language="javascript";
     script.type="text/javascript";
     script.innerHTML = em[i].innerHTML;
     document.body.appendChild(script);
    }
  }
});

是否可以在加载新代码时停止执行以前的代码?

P.S:我想使用纯JavaScript代码。

我的解决方案:

  window.$timeout = {};
  window.$interval = {};

  window.$setTimeout = window.setTimeout;
  window.$setInterval = window.setInterval;
  window.$clearTimeout = window.clearTimeout;
  window.$clearInterval = window.clearInterval;

  window.setTimeout = function(id, code, delay) {
    if(typeof $timeout[id] !== "undefined") clearTimeout(id);
    $timeout[id] = $setTimeout(code, delay);
  }; 

  window.clearTimeout = function(id) {
    $clearInterval($timeout[id]);
    delete $timeout[id];
  };

  window.setInterval = function(id, code, delay) {
    if(typeof $interval[id] !== "undefined") clearInterval(id);
    $interval[id] = $setInterval(code, delay);
  }; 

  window.clearTimeout = function(id) {
    $clearInterval($interval[id]);
    delete $interval[id];
  };

3 个答案:

答案 0 :(得分:2)

要使用timeout()停止现有通话,您可以使用:

clearTimeout(t);

您可以保留一个全局变量来保持调用函数的次数,并围绕该变量编码clearTimeout() ...

拨打电话:

t = setTimeout("thing()",1000);

答案 1 :(得分:2)

如果您没有跟踪setInterval()setTimeout()个标识符,除非您刷新整个页面,否则这是不可能的。

How to stop all timeouts and intervals using javascript?


清除所有事件处理程序也不是微不足道的;你必须遍历整棵树并在所有树上调用.unbind()。也许你可以限制范围?

How to remove all Click event handlers in Jquery


唯一容易的事情是确保没有正在运行的函数,因为在处理AJAX响应时你很确定没有其他代码在运行:)

答案 2 :(得分:1)

您可以使用这些功能清除超时和间隔clearInterval(id)&amp; clearTimeout(id)(谷歌他们)

从功能开始,你可以这样做:

// Orginal function
window.myFunc = function(a,b,...){ ...your code here... }


// New function after ajax load
$.ajax({ 
    url : '/blablabla.php',
    type : 'GET',
    data : params,
    succes : function(){
        ......
        window.myFunc = function(a,b,...){ ...your NEW code here... }
    }
});