2010-08-16 43 views
1

這是我的情況:jquery和ajax如何結合在一起?

我有一個頁面,一旦點擊它的一個div的ajax請求獲取更多的內容到頁面。

我在說的內容越多,就是使用jQuery的圖片庫內容。 我的問題是,一旦我從ajax請求得到響應,我操縱DOM。 因此jquery ready()函數不再適用於我(或是否?) 可以跳過我爲 $.fn指定一個函數的問題,稱爲InitGallery

使用eval我可以調用它,一旦我的ajax響應到達,一切都很好,除了一個小問題 - 同步!

一旦我eval我的$.fn.InitGallery代碼,操縱DOM不一定是完全加載,因此我的InitGallery失敗。

一旦我添加一個睡眠或警告我的代碼,並確保在DOM再次準備好之後運行InitGallery函數,這很好,並且工作正常。

我想我的問題是我如何重新分配一個現成的功能到DOM?我怎麼才能確保函數調用後的ajax響應只有在DOM上的ajax響應更改準備好後纔會調用? 謝謝

+0

格式不當,對問題的標題很糟糕,但有趣的是沒有那麼多。 +1 – 2010-08-16 19:58:56

回答

0

在你的ajax請求的成功處理程序中調用你的init函數。

$.ajax({ 
    url: 'ajax/test.html', 
    success: function(data) { 
    makeYourChanges(); 
    callYourInit(); 

    } 
}); 
1

我需要更多的信息,但我的初步答案是:

無論您加載內容AJAX應觸發「準備」事件或新的內容加載完成類似的東西。這樣你可以將InitGallery綁定到該元素的「準備好」,並在dom準備就緒後完成所有初始化。

什麼是通過AJAX加載您的內容?

+0

好吧,只是我寫的一個愚蠢的功能。 我想我會改變它與jquery ajax框架一起工作。根據另一種答案,我得到 : $阿賈克斯({ 網址: 'AJAX/test.html的', 成功:功能(數據){ makeYourChanges(); callYourInit(); } }); 應該工作。 你對這個問題有什麼想法嗎? – Oded 2010-08-16 20:05:42

+0

'callYourInit()'可能不像看起來那麼簡單。腳本有哪些功能用於加載的ajax內容,它在內容中還是已經包含在內? – 2010-08-16 20:28:03

3

根據你想要做的事情,你有幾個選項。

如果您使用live函數,您可以將事件連接一次,並且在更改DOM後它們將繼續工作。

另一種選擇是將初始化代碼的函數:

$(function() { 
    doCoolStuff(); 
}); 

然後掛接到ajaxCompleteajaxSuccess事件:

$.ajaxComplete(function() { 
    doCoolStuff(); 
}); 
+0

只是想指出你在你的第一個片段中有一個語法錯誤 – 2010-08-16 20:05:54

+0

感謝鮑勃 - 修復它。 – 2010-08-16 20:06:48

0

無需對文檔使用ready()事件再次爲此。就緒事件只會在DOM最初加載時觸發一次。

對此的方法是將函數分配給您傳遞給ajax調用的對象的success屬性;一旦呼叫的響應成功完成,這是您希望執行的功能。

$.ajax({ 
    url : 'http://some.url', 
    success : function(response) { 
     // do the insert into the DOM. An example 
     // assuming your response is text/html 
     $(document.body).append(response); 

     // now call InitGallery 
     $('#selector').InitGallery(); 
    } 
}); 
相關問題