У меня есть несколько запросов ajax с кодом javascript в качестве ответа, и мне нужно остановить выполнение кода javascript предыдущего кода, когда был загружен новый код, я имею в виду остановить интервалы, функции, тайм-ауты ...Остановить выполнение некоторого кода 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];
};
«P.S: Я бы хотел использовать чистый код javascript». M - why? jQuery будет гарантировать, что он будет работать с перекрестным браузером ... чистый JS не может. – Brian
Использование «чистого javascript» (методы DOM), подобного этому, смешанного с jQuery, является прямым путем к утечкам памяти. – Esailija
@Brian, если это возможно с jquery, тогда это будет нормально. – John