2015-10-07 240 views
1

我有一個按鈕和2個鏈接,這使得Ajax請求調用函數。如果按鈕調用的請求完成,我想顯示警報。但是,如果我點擊某個鏈接,我不想顯示警報。這是我的代碼:如果AJAX請求完成

HTML:

<button id="ajax">Ajax</button> 
<a href="#">link 1</a> 
<a href="#">link 2</a> 

<div></div> 

JS:

$('#ajax').click(function() { 
    $("div").load("/echo/js/?js=button"); 

    $(document).ajaxStop(function() { 
     alert('alert') 
    }); 
}) 

$('a').click(function() { 
    $("div").load("/echo/js/?js=link"); 
}) 

http://jsfiddle.net/rgyxzwj6/

爲什麼,如果我按一下按鈕,然後我點擊一些鏈接,它顯示警報?第一次點擊按鈕後,它只顯示一次警報。但是,如果我第二次點擊該按鈕,則會顯示兩次警報。我該如何解決這個問題?

回答

2

1.執行您的警報

,您應該使用jQuery的負載的回調函數來執行的提醒:

$('#ajax').click(function() { 
    $("div").load("/echo/js/?js=button", function() { 
     alert('alert'); 
    }); 
}); 

$('a').click(function() { 
    $("div").load("/echo/js/?js=link"); 
}); 

回調函數

如果提供了「完整」回調,則在執行 後處理和HTML插入後執行。回調是 爲jQuery集合中的每個元素觸發一次,並且依次爲每個DOM元素設置 。

從jQuery API和更多信息有關load()http://api.jquery.com/load/

這裏是你的情況下更新的小提琴:http://jsfiddle.net/55rpfe0w/

2. ajaxStop處理

您的代碼。 ..

$(document).ajaxStop(function() { 
    alert('alert') 
}); 

...當您使用鏈接執行您的ajax請求時,也會調用事件處理函數。

每當Ajax請求完成時,jQuery會檢查是否有 任何其他未完成的Ajax請求。如果不存在,jQuery將觸發ajaxStop事件 。

從jquery的API:https://api.jquery.com/ajaxStop/

3。多次報警

而第一次點擊按鈕後,它只顯示警報一次。但如果我第二次點擊該按鈕,它會顯示兩次警報。我怎樣才能修復這個問題?

的原因是,你設置事件ajaxStop處理程序在你的點擊功能,每單擊這個按鈕,你設置另一個事件處理程序等:

任何和所有的處理程序已經使用.ajaxStop()方法註冊。

來自jQuery的API:https://api.jquery.com/ajaxStop/