2016-11-11 97 views
-1

我正在創建一個使用三種不同ajax的門戶,點擊自動生成菜單的鏈接觸發。我的客戶在每次點擊時都會多次請求相同的ajax。我怎樣才能防止呢?

問題是,當我點擊菜單的許多鏈接時,我的瀏覽器需要更多時間和更多內存來處理這些請求。

我的問題在Chrome的開發工具的網絡選項卡中非常清楚。

我第一次點擊時,每個ajax頁面只有一個請求,但是第二次我有兩個相同ajax頁面的請求。 第三次4請求,然後8,然後16,然後32等等。

我怎麼能阻止?

這是我的JavaScript頁面代碼:

$(document).ready(function() { 

var ajaxser; 
var ajaxfun1; 
var ajaxfun2; 


$("a.servicelink").one("click",function() { 

    $("#ajaxloader").show(); 


    var select = $(this).attr("ser:id"); 


    ajaxser = $.ajax({ 
     url: "ajax/ajaxservicetab.php", 
     type: 'post', 
     data: {'select': select}, 
     success: function (data) 
     { 
      var servicetable = data; 
      $("#content").html(servicetable); 


      ajaxfun1 = $.ajax({ 
       url: "ajax/ajaxfunctionmenu.php", 
       type: 'post', 
       data: {'select': select}, 
       success: function (data) 
       { 
        var functionmenu = data; 
        $("#functionality").html(functionmenu); 
        $("#ajaxloader").hide(); 
       } 
      }); 
     } 

    }); 



$("a.servicelink").unbind();  

}); 
$("a.functionlink").click(function() { 
    $("#ajaxloader").show(); 



    var funid = $(this).attr("fun:id"); 
    var appid = $(this).attr("app:id"); 
    var funnome = $(this).attr("nom:id"); 

    ajaxfun2 = $.ajax({ 
     url: "ajax/ajaxfunctiontab.php", 
     type: 'post', 
     data: {'funid': funid, 'appid': appid, 'funnome': funnome}, 
     success: function (data) 
     { 
      var functiontable = data; 
      $("#content").html(functiontable); 

      $("#ajaxloader").hide(); 

     }, 
     complete: function() { 
      $("a.servicelink").unbind(); 
      $("a.servicelink").off(); 
      ajaxser.abort(); 
     } 
    }); 

$("a.functionlink").unbind(); 

}); 

編輯:

通過點擊 「a.servicelink」 我調用兩個AJAX:ajaxser和ajaxfun1。

用ajaxfun1調用的ajax頁面包含調用ajaxfun2的「a.functionlink」。

EDIT2:

我通過添加解除綁定功能來編輯代碼。 第二次點擊時發生了什麼變化,ajax只被調用一次,但在第三次調用時,它又被調用了兩次,然後是4,依此類推。

編輯3:增加了「完整」的方法,沒有區別。代碼已更新。

+1

聽起來像每次點擊你以某種方式重新綁定所有事件。 – epascarello

+0

嘗試..'.unbind(「click」)' –

+0

@ epascarello是的,但它們中的「ser:id」值總是最後一個。 –

回答

1

您可以嘗試添加完整的方法。

complete: function() { 
     // Disable (a.servicelink) click event here and re-enable after callback. 
} 
+0

我說: 齊全:函數(){$ ( 「a.servicelink」)取消綁定(); $( 「a.servicelink」)。 .off(); ajaxser.abort(); } 但是這並沒有改變任何東西。 有什麼我錯過了嗎? –

相關問題