2013-12-18 41 views
0

我試圖按順序進行ajax調用,然後應用把它們附加到主html文件的句柄。但我的下面的代碼只是在第一個請求中掛起。當我手動嘗試此網址時,它會返回HTML。但不是當我嘗試通過。我在這裏犯了什麼邏輯錯誤。ajax調用掛在jquery

var i = 0; 
var flagArray = new Array(data.length); 
while (i < data.length) { 
    if (flagArray[i] == 'done') { 
     i++; 
     console.log(i); 
    } 
    if (flagArray[i] != 'fired') { 
     flagArray[i] = 'fired'; 
     $.get('commonCore/templates/' + data[i].templateHtml, function (html) { 
      console.log(data[count].classSelect, i); 
      var filterTemplate = Handlebars.compile(html); 
      replaceFilterTemplate(filterTemplate, data[i].classSelect); 
      flagArray[i] = 'done'; 
     }); 
    } 
} 

數據是JSON:

[ 
    { 
     "templateHtml": "dcdcsFilterOptions.html", 
     "classSelect": "dcdcsOptions" 
    }, 
    { 
     "templateHtml": "dashBoardLeftInsight.html", 
     "classSelect": "leftpanel" 
    }, 
    { 
     "templateHtml": "advanceFilterOptions.html", 
     "classSelect": "advancedOptions" 
    }, 
    { 
     "templateHtml": "reportFilterOptions.html", 
     "classSelect": "reportdashboard" 
    } 
] 

在鉻網絡示出了用於將第一請求永遠因此一切都掛掛起狀態。但manuall嘗試返回數據。

+2

你的瀏覽器線程一個無限循環。 Ajax回調無法執行,因爲循環沒有終止。所以,'flagArray [i]'不能設置爲''完成','i'不會增加。爲什麼要按順序執行Ajax調用有特定的原因嗎?爲什麼不能並行運行它們? –

+0

是的先生,因爲這將創建我的網頁,並依賴於第一個到下一個。接下來只會追加到第一個底部的id,這是他們在html中...所以 – user3115998

回答

0

如果你想連續的請求嘗試像

function request(array) { 
    if (!array || !a.length) { 
     return 
    } 
    var item = array.shift(); 
    $.get('commonCore/templates/' + item.templateHtml, function (html) { 
     var filterTemplate = Handlebars.compile(html); 
     replaceFilterTemplate(filterTemplate, item.classSelect); 
     request(array) 
    }); 
} 
request(data) 

與您的代碼的問題,直到請求的整個陣列處理你堵,因爲while循環

+0

你忘了在回調中調用'request'嗎? –

+0

@FelixKling是的! –

+0

實際上它需要被阻止......因爲這將首先創建其餘代碼將在其上運行的頁面。 – user3115998