utils.Ajax(url, data, {showLoad:true}, function(data) {
if (data.success) parseList(data.returnDTO.list);
});
function parseList(list) {
utils.Ajax(url2, data2, {showLoad:true}, function(data) {
if (data.success) {
for (var j = 0; j < data.returnDTO.list.length; j++) {
for (var i = 0; i < 5; i++) { /* 內層完全不進入 */ }
}
}
});
}
外層 j 迴圈正常,內層 i 迴圈永遠不執行,alert 顯示兩次 AJAX 皆成功。
var i 在函式作用域被提升,若外層同名變數 i 存在,內層 var i 實際指向同一變數。i 已被修改 (如為 5),內層判斷 i < 5 直接失敗。data.returnDTO.list.length 可能為 0,導致外層迴圈零次,但提問者說外層能進入,故排除。let 區塊作用域 (ES6+)for (let j = 0; j < list.length; j++) {
for (let i = 0; i < 5; i++) { /* 各迴圈擁有獨立 i, j */ }
}
for (var j = 0; j < list.length; j++) {
(function(j) {
for (var i = 0; i < 5; i++) { /* i 仍為 var,但 j 被鎖定 */ }
})(j);
}
forEach / map 函數式風格list.forEach(item => {
Array.from({length: 5}, (_, i) => { /* 安全 */ });
});
如最佳回答建議,先在外層迴圈前 console.log(data.returnDTO.list.length) 確認資料筆數。若為 0,問題根本不在迴圈邏輯,而在上游 API 回傳空陣列。
"use strict" + ESLint no-var 規則,強制使用 let/const。Promise.all / async-await 扁平化流程,減少回呼地獄。