2010-06-09 45 views
25

jQuery庫的.load()函數允許您有選擇地從另一個頁面加載元素(受特定規則約束)。我想知道是否有可能中止的加載過程。正在中止jQuery()。load()

在我們的應用程序中,用戶可以瀏覽項目列表。他們可能會選擇單擊一個按鈕,該按鈕可從另一文檔加載並顯示有關項目的附加信息(可能需要一些時間)。如果他們在清單中選擇了另一個項目,而​​仍在發生,我希望加載被中止。

這可能嗎?它甚至值得嗎?有任何想法嗎?

回答

34

你不能用.load()這樣直接,因爲它返回鏈接jQuery對象,但如果換到全$.ajax()通話與.html()就可以了,就像這樣:

var xhr = $.ajax({ 
      url: 'mypage.htm', 
      success: function(data) { 
       $("#myElement").html(data); 
      } 
      }); 
//if needed, abort the request later.. 
xhr.abort(); 

這使用.abort() method on the XMLHttpRequest object中止負載。

+0

完美答案;謝謝。 – 2010-06-09 16:23:29

+0

+1謝謝你好回答 – gray 2013-05-12 15:11:47

1

您可以通過手動使用jQuery.ajax做到這一點。它將返回一個XMLHttpRequest對象,您可以根據需要調用abort。在成功處理程序,您可以用jQuery.html

8

尼克的答案几乎是我所需要的,但並不完全。我正在使用.load()來僅加載頁面中的圖像。因此,擴大對尼克的回答是......

所以不是...

$('#myElement').load('mypage.htm #myImage'); 

現在,我使用...

var xhr = $.ajax({ 
      url: 'mypage.htm', 
      success: function(data) { 
       $("#myElement").html($(data).find("#myImage")); 
      } 
      }); 
//if needed, abort the request later.. 
xhr.abort(); 
+0

這不適合我...我認爲問題是.find ...有沒有其他的選擇,我可以探索抓特定的分區...沒有使用.load – justcode 2012-10-03 04:07:10

+0

''$ .ajax'爲你返回數據? – Homer 2012-10-03 14:08:14

+0

是的,它只是做$(「#myElement」)。html(data)...但是當我添加.find ...沒有任何東西被返回,我確定這個調用是成功的。 – justcode 2012-10-03 16:02:23

1
$("#myElement").load("/mypage #mayImage", function(response, status, xhr) { 
    if (status == "error") { 
    xhr.abort(); 
    } 
}); 

應該像這樣。

或者在另一個事件上,我發一個長字段驗證,用戶改變的內容,我想停止以前的檢查重新檢查:

xhr.abort(); 

$("#myElement").load("/mypage #mayImage", function(response, status, xhr) { 
    if (status == "error") { 
    xhr.abort(); 
    } 
});