2

応答としてjavascriptコードを使用した複数のajaxリクエストがあり、新しいコードが読み込まれたら、以前の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)(Google それら)

関数として、これを行うことができます:

// 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 に答える