2011-12-19 116 views
0

我試圖使用jQuery get()函數發出HTTP GET請求,但我遇到了一些麻煩。從jQuery發出GET請求的問題

這裏是我的代碼如下所示:

// get the links on the page 
var pageLinks = $.find('#pageLinks'); 
// loop through each of the links 
$(pageLinks).find('a').each(function(){ 
    if($(this).attr('title') !== "Next Page"){ 
     // make a GET request to the URL of this link 
    $.get($(this).attr("href"), function(data) { 
      console.log("here"); 
      var temp = parse_page(data); 
      // concatenate the return string with another 
      bdy = bdy+String(temp); 
      console.log("done"); 
     }); 
    } 
}); 

有跡象表明,我需要從獲取數據的多個頁面。由於get()函數是異步的,我以隨機順序獲取頁面。其次,連接不起作用。儘管我得到了每一頁,但它們並沒有放入bdy

任何人都可以建議我怎麼處理這個?

非常感謝!

+0

'String(temp)'做了什麼? – 2011-12-19 22:29:33

+0

哪裏是'bdy'定義? – muratgu 2011-12-19 22:31:22

+0

就同步問題而言,爲什麼不使用jQuery推遲鏈接回調? – JesseBuesking 2011-12-19 22:35:03

回答

0

我剛剛發現有一些模塊允許用戶管理JS中的控制流。我發現的是:

如需幫助採用上述模塊,看到我的跟進問題here

0

構造bdy在所有頁面被檢索後,即商店get產生字典或數組;等待所有get s完成;然後按照正確的順序組裝它們。

+0

我想到了這一點,但我覺得應該有一些內置的方式來做到這一點,這是我希望在這裏找到的 – efficiencyIsBliss 2011-12-19 22:40:23

0

我想這個和它的作品:

// get the links on the page 
var pageLinks = $('a'); 
var bdy 
// loop through each of the links 
$(pageLinks).each(function(){ 
console.log(this); 
     // make a GET request to the URL of this link 
      $.get($(this).attr("href"), function(data) { 

      // concatenate the return string with another 
      bdy = bdy + data.toString(); 
      console.log(bdy); 
     }); 

}); 
+0

我得到了與以前一樣的代碼的相同結果。 – efficiencyIsBliss 2011-12-19 22:39:41

0

至於什麼@muratgu說一個例子:

var results = []; 
var count = 0; 

function allDone() { 
    var bdy = results.join(""); 
    // do stuff with bdy 
} 

// get the links on the page 
var pageLinks = $.find('#pageLinks'); 

// filter the links so we're left with the links we want 
var wantedLinks = $(pageLinks).find('a').filter(function (idx) { 
    return $(this).attr('title') !== "Next Page"; 
}); 

// remember how many links we're working on 
count = wantedLinks.length; 

// loop through each of the links 
wantedLinks.each(function (idx) { 
    // make a GET request to the URL of this link 
    $.get($(this).attr("href"), function (data) { 
     console.log("here"); 
     var temp = parse_page(data); 
     results[idx] = temp; 

     // Decrement the count. 
     count--; 

     if (count === 0) { 
      // All done. 
      allDone(); 
     } 
    }); 
}); 

你可以走得更遠,抽象到這一點,可以執行數據類型N個異步下載,然後在全部完成時通知您。