2011-01-26 18 views
1

我有一個非常令人沮喪的問題,我希望有人可以幫助我。這是我的Greasemonkey腳本的一部分,我無法弄清楚爲什麼異步請求總是發送到同一個URL。我找不到爲什麼URL不會爲我的Greasemonkey腳本中的GM_xmlhttpRequest更改

function parse(details) { 
    var element = $(details); 
    var coll = element.find("#my valid selector"); 

    $.each(coll, function(index, href) { 
      SendData(href); 
    }); 
} 

function SendData(url) { 
     GM_xmlhttpRequest ({ 
     method: 'GET', 
     url: url, 
     headers: { 
     'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey', 
     'Accept': 'application/atom+xml,application/xml,text/xml', 
     }, 
     onload: function(responseDetails) { 
      doSomething(responseDetails.responseText); 
     } 
    });  
} 

當我啓動Fiddler時,無論收集的物品有多少,我都可以看到它發出相同的請求。無論第一個鏈接是什麼,所有請求都會發送到該鏈接。我已經驗證瞭解析方法每次都成功地將一個不同的鏈接傳遞給SendData函數,但是請求總是發送到集合中的第一個URL。

我以爲我有什麼類似於我發現的here,但也許我錯過了一些東西。任何幫助,將不勝感激。

回答

0

看起來好像url沒有在closure中被捕獲,所以除了第一個GM_xmlhttpRequest運行外,其他都沒有定義。

修改SendData(),就像這樣:

function SendData(url) 
{ 
    var moreSubstantial = url + " "; 

    GM_xmlhttpRequest(
    { 
     method:  'GET', 
     url:  moreSubstantial, 

應該夠了。


或者,您可以按順序獲取頁面。將parse()更改爲:

function parse (details) 
{ 
    var element  = $(details); 
    var coll  = element.find("#my valid selector"); 
    var TargetPages = coll.map (function() {return this.href;}); 

    (function getNextPage (J) 
    { 
     var PageURL = TargetPages[J]; 

     GM_xmlhttpRequest 
     ({ 
      method:  "GET", 
      url:  PageURL, 
      headers: { 
          'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey', 
          'Accept': 'application/atom+xml,application/xml,text/xml', 
         }, 
      onload:  function (responseDetails) 
         { 
          doSomething (responseDetails.responseText); 

          if (--J >= 0) 
           getNextPage (J); 
         } 
     }); 
    }) (TargetPages.length - 1); 
} 
+0

Thanks!我知道它必須是小東西! – jaltiere 2011-01-28 14:40:42

相關問題