2

我有多个以javascript代码作为响应的ajax请求,一旦加载了新代码,我需要停止执行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);
    }
  }
});

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

PS:我想使用纯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];
  };
4

3 回答 3

2

要使用 停止现有呼叫timeout(),您可以使用:

clearTimeout(t);

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

拨打电话:

t = setTimeout("thing()",1000);
于 2012-07-04T12:29:57.843 回答
2

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

如何使用javascript停止所有超时和间隔?


清除所有事件处理程序也并非易事;您必须遍历整棵树并调用.unbind()所有这些树。也许你可以限制范围?

如何删除 Jquery 中的所有 Click 事件处理程序


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

于 2012-07-04T12:30:22.960 回答
1

clearInterval(id)您可以使用这些功能和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... }
    }
});
于 2012-07-04T12:33:50.133 回答