2011-01-26 12 views
1

私は本当に欲求不満な問題を抱えています。ここに私のGreasemonkeyスクリプトがあります。私は非同期要求が常に同じURLに送られる理由を理解できません。GreasemonkeyスクリプトのGM_xmlhttpRequestのURLが変更されない理由がわかりません

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

closureにはurlがキャプチャされていないようですので、最初の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

ありがとうございます!私はそれが何か小さいものでなければならないことを知っていた! – jaltiere

+0

私はそれを言い換えてみましょう.......小さな意味私は多くを変更する必要はありませんでした。私は閉鎖をねじ込んだので大きな。 :) – jaltiere

関連する問題