我有多个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];
};
答案 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... }
}
});