2014-09-02 75 views
0

我對JavaScript比較陌生,我試圖製作一個簡單的腳本。基本上,我希望它能找到一個名爲ROBLOX的網站的最低價格。出於某種原因,此腳本導致無限循環,導致Chrome崩潰。任何人都可以幫助爲什麼這會造成無限循環?

function getLowest(id) { 
    var give; 
    for (var page = 1; page < 33; page++) { 
     var link = "http://www.roblox.com/catalog/browse.aspx?CatalogContext=1&Subcategory=9&CurrencyType=0&pxMin=0&pxMax=0&SortType=0&SortAggregation=3&SortCurrency=0&PageNumber=" + page + "&IncludeNotForSale=false&LegendExpanded=true&Category=3"; 
     $.get(link, function(data) { 
      for (var item in data) { 
       if (data[item]["AssetId"] == id) { 
        give = data[item]["BestPrice"]; 
       } 
      } 
     }) 
    } 
    if (give) { 
     return give; 
    } 
} 

console.log(getLowest(prompt("Enter the ID to find the lowest price of"))); 
+6

你怎麼知道有一個無限循環涉及到,你是否使用穩定的Chrome?這看起來更像是什麼也沒有返回,因爲請求在你返回給予時沒有完成。 – Ryan 2014-09-02 03:49:05

+0

我可以無限地告訴它循環,因爲我之前正在寫入控制檯。 – David 2014-09-02 03:50:17

+1

我第二個minitech的評論。另外,如果您使Chrome崩潰,則可能是嘗試同時打開32個HTTP連接。 – 2014-09-02 03:50:30

回答

0

我真的想通了,謝謝你的幫助。

這是我結束了:

function getLowest(id) { 
    for (var page = 1; page < 33; page++) { 
     var link = "http://www.roblox.com/catalog/json?browse.aspx?CatalogContext=1&Subcategory=9&CurrencyType=0&pxMin=0&pxMax=0&SortType=0&SortAggregation=3&SortCurrency=0&PageNumber=" + page + "&IncludeNotForSale=false&LegendExpanded=true&Category=3"; 
     $.get(link, function(data) { 
      for (var item in data) { 
       if (data[item]["AssetId"] == id) { 
        console.log(data[item]["BestPrice"]); 
        return; 
       } 
      } 
     }) 
    } 
} 

getLowest(prompt("Enter the ID to find the lowest price of")); 
0

你是不是面臨着一個無限循環的問題,而是一個異步加載的問題。

for (var page = 1; page < 33; page++) { 
    $.get(link, function(data) { 
     for (var item in data) { 
      if (data[item]["AssetId"] == id) { 
       give = data[item]["BestPrice"]; 
      } 
     } 
    }) 
} 

假設你正在使用jQuery的$.get查詢這些頁面,$.get的默認行爲是來查詢頁面異步的。因此,此循環將完成而不必等待$.get被調用時的所有回調,這表明give在退出循環時將保持不確定狀態。

該解決方案將是一個你在你的答案提示,或

  • $.get要使用async.js做異步收集,並改寫函數回調使用$.ajax({ url: link, async: false }).done(function(data) {})
  • 同步畢竟查詢工作完成。