循環調用 kuaisuxuanren(x),每次請求返回動態生成 <li> 追加到容器,但後續請求結果覆蓋前一次內容。
var persons = document.getElementById(x); // 關鍵:x 為參數,每次傳入不同 ID?
persons.appendChild(li); // 追加到對應容器
x 為固定值或邏輯導致所有請求操作同一容器,則為正常追加非覆蓋。若確為覆蓋,檢查是否在回調前執行了 persons.innerHTML = '' 或 $(persons).empty()。var 宣告導致回調共享同一變量,改用 let 或 IIFE 封裝。async function loadPersons(containerId, keyword) {
const container = document.getElementById(containerId);
const resp = await fetch('/api/search', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({keyword})
});
const {jsonData: {var: list}} = await resp.json();
list.forEach(item => {
const li = document.createElement('li');
li.textContent = item.name;
li.dataset.email = item.email;
container.appendChild(li);
});
}
// 並發控制:限制同時 3 個請求
async function runAll() {
const tasks = ['id1','id2','id3'].map(id => loadPersons(id, getKeyword(id)));
await Promise.all(tasks);
}
使用 fetch + async/await 替代 XMLHttpRequest,邏輯更清晰,易於並發控制與錯誤處理。