2010-02-28 25 views
0

對不起,標題不是很好,這是一個加載的問題。 我想要做的是從頁面上的鏈接加載多個頁面(它們在同一主機上)。在我的情況下,它是在線程視圖中的論壇,我想加載最後一頁的帖子,所以有一些預覽。使用jquery和greasemonkey獲取多個頁面

爲了簡單起見,我的代碼示例假設jquery已經加載。

基本上,代碼工作,但是如果有很多多個請求,頁面只是掛起,即 - 如果我將條件更改爲intIndex < 3或更多。

$('.lastposter').each(
     function (intIndex){ 
      if(intIndex < 2){ 
       var threadlink = $('a', this)[1].href; 
       var thread = $.ajax({ type: "GET", url: threadlink, async: false }).responseText; 

       $(this.parentNode.parentNode).attr('title', $('.post', thread).text()); 

      } 
     } 
    ); 

那麼我的加載問題是,有沒有更好的方法來做到這一點?我想我只需要在循環中暫停一些,或者可以改變它,以便ajax請求發生(例如)該行的懸停事件。 另外,結果會被緩存嗎?如果沒有,是否有辦法讓他們緩存或者我應該把它留給服務器?我正在考慮將它們存儲爲GM變量(GM_setValue),但也許這會變得混亂或泄漏。

如果你有一些想法,建議,例子等,我很樂意聽到他們。

回答

1

您的代碼的問題是,它請求-異步請求。這導致$ .ajax函數等待服務器的答案。

對於asynchrous請求時,你需要定義一個回調函數,就像這樣:

$.get(threadlink, function(thread) { 
    $(this.parentNode.parentNode).attr('title', $('.post', thread).text()); 
}); 

要處理環節一個接一個,而不是一堆simulaneous的請求,你可以捕捉到節點在一個數組(makeArray)和pop中以特定速率一次一個(setTimeout/setInterval)。請注意,greasemonkey在這裏得到了一些陷阱...

結果將被緩存大部分像任何其他頁面。 IE在到期日期之前不會檢索它。也許你必須更改服務器緩存/過期響應頭。

看看這個,這聽起來類似(但不使用jquery)

http://userscripts.org/scripts/show/19613

+0

感謝您的信息,我想我不說清楚異步位做什麼。我剛剛嘗試了你的方法(回調函數),如果我只記錄了響應,但是我不能設置標題(我認爲這超出了範圍?)。 無論如何,我會繼續阻止它,但很明顯,我已經超出了我的深度:D – aland

相關問題