我正在創建一個使用三種不同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:增加了「完整」的方法,沒有區別。代碼已更新。
聽起來像每次點擊你以某種方式重新綁定所有事件。 – epascarello
嘗試..'.unbind(「click」)' –
@ epascarello是的,但它們中的「ser:id」值總是最後一個。 –