2017-12-01 17 views
0

ページ・ロード時に動的に作成されるhtml表内のユーザーのリスト。各行にはインラインボタンがあり、各ボタンにはonclick = "functionName(userId)"があり、以下の関数を呼び出します:クリックすると、ブートストラップモデルのポップアップが表示され、その後ajaxの呼び出しが開始されます。問題は、ユーザーがモデルを閉じた後にajax呼び出しを停止し、ユーザーが別の行/ユーザーをクリックして現在のユーザーIDを渡す場合です。なんらかの理由で、時にはajaxがコールを停止し、時々dontします。以前のuserIdは、指定された間隔でダブルコールまたはトリプルコールのいずれかに保存されています。あなたの洞察をいただきありがとうございます。SetTimeout javascript、予期しない実行を使用したAjax呼び出しの繰り返し

var timer = null; 
function RTLS(id) { 
    $('#RTLSModal').modal('show'); 
    window.clearTimeout(timer); 

    $('#RTLSModal').on('hidden.bs.modal', 
     function() { 
      window.clearTimeout(timer); 
      timer = 0; 
      $('#RTLSModal .modal-body').html(""); 
      $('#RTLSModal').data('bs.modal', null); 
     }); 
    $('#RTLSModal').on('shown.bs.modal', 
     function() { 
      GetRealTimeScans(id);  

     }); 
} 

function GetRealTimeScans(id) { 
    var html = ''; 
    $.ajax({ 
     url: '/api/v1/computers/GetRealTimeKeys?computerId=' + id, 
     typr: "GET", 

     contentType: "application/json;charset=UTF-8", 
     dataType: "json", 
     success: function (scans) { 
      if (scans.length > 0) { 
       $.each(scans, 
        function (index, value) { 

         //create html 

        }); 

       $('#RTLSModal .modal-body').html(html); 
      } else { 
       html += '<div class=""><h3 style="text-align: center;">No one around</h3></div>'; 
       $('#RTLSModal .modal-body').html(html); 
      } 
     }, 
     complete: function() { 
      timer = setTimeout('GetRealTimeScans('+id+')', 10000); 
     } 
    }); 
} 
+0

アクティブな場合は、おそらくAjax呼び出しを中止する必要があります。 – epascarello

答えて

1

だから、それは

var timer = null; 
var ajaxCall; 

function cleanUp() { 
    if (timer) window.clearTimeout(timer); 
    if (ajaxCall) ajaxCall.abort() 
} 

を停止するように、Ajax呼び出しを中止し、あなたが電話をかけるとき

cleanUp() 
ajaxCall = $.ajax({}) 
       .done(function() { 
       ajaxCall = null 
       timer = window.setTimeout(function(){}, 10000) 
       }); 

そして: //この関数は、そのuserIdを渡す各行から呼び出されますイベントをモーダルにバインドするときは、前のイベントハンドラを削除する必要があります。

$('#RTLSModal') 
    .off('hidden.bs.modal shown.bs.modal') 
    .on('hidden.bs.modal', function() {}) 
    .on('shown.bs.modal', function() {}); 
+0

ありがとうございます。あなたのソリューションも同様のやり方で動作します。最初のモデルのみがうまく動作します.2行目をクリックすると、ajax呼び出しは以前のIDと新しいIDをインライン関数に渡し、2回の呼び出しを(10秒後に)一度に行います。私はタイマーをwindow.setTimeout(function(){GetRealTimeScans(id)}、10000)に変更しました。 。私は何が起こっているのか分からない。 – Raj

+0

ああ、モーダルでイベントをバインド解除することは決してありません.... – epascarello

+0

それは、ありがとうございます。良い作品 – Raj

関連する問題