2013-04-03 29 views
0

我試圖從單個站點使用TamperMonkey/Javascript/jQuery「蜘蛛」一小組數據,並將它整理到單個頁面上。在js/jQuery中'定步'HTTP請求的首選技術?

我寫了一個腳本TM(當我打開目標頁面時觸發)執行以下操作:

  • 搜索頁面的特定類型的鏈路(通常大約8 鏈接)
  • 「跟隨」發現了新的一頁的各個環節,找到並跟隨從那裏
  • 單鏈路提取我感興趣的數據和「收編」入 原來的頁面,我打開。

迭代完成這些操作通常會導致在該站點激發16個(8 * 2個鏈接)HTTP請求。如果我手動調用它(通過控制檯)以單步執行所有16個數據段的操作,我寫的代碼工作正常。

但是,如果我嘗試並設置循環起來,讓代碼只是「做的事情」,我得到您請求後約4次迭代沒有響應型HTML回來(狀態= OK)的頁面。我猜這個網站正在保護自己免受某種XSRF攻擊,或者真的很慢?

我的問題是什麼是首選技術來降低我從網站請求數據的速度?我已經考慮過構建一個HTTP函數調用或URL的數組來處理,但這看起來很笨重,有沒有更適合我的慣用方法?

我猜這肯定是一個這樣的常見問題,並且存在固體解決方案,但我沒有足夠的掌握術語來正確搜索它。

回答

2

類似的答案,我貼在其他問題:Browser stops working for a while after synchronous ajax call in a for loop

您可以使用一個「遞歸」功能,以幫助您控制與異步調用流動。與其同步運行,你可以異步運行它們,並在下一次運行時運行它。

喜歡的東西:

function doCall() { 
    setTimeout(function() { 
     $.ajax({ 
      //... 
      succcess: function(data) { 
       //... 
       //time to start the next one 
       doCall(); 
      }, 
      error: function() { 
       //call the next one on error? 
       doCallI(); 
      } 
     }); 
    }, 1000); //1 second wait before each run 
} 

這樣,他們異步運行,而他們都呼籲不要阻止一切;但仍然連續運行。你甚至可以在doCall函數中放一小段時間,這樣就有一些空間。