通过Trello API获取数组后,循环渲染至HTML列表无数据问题求助
Hey there! Let's break down why your Trello API data isn't showing up in your HTML list—this is a super common gotcha with async requests, so don't sweat it. Here are the most likely culprits and fixes:
1. You're Running the Loop Before the API Response Loads
XHR requests are asynchronous, meaning your code doesn't wait for the API to send data back before moving on. If your loop is outside the onload callback, it's trying to iterate over nearTerm before the data has actually been fetched.
Wrong Approach:
let nearTerm; const xhr = new XMLHttpRequest(); xhr.open('GET', 'https://api.trello.com/1/boards/your-board-id/cards?key=your-key&token=your-token'); xhr.send(); // This runs BEFORE the API response arrives—nearTerm is undefined! for (const item of nearTerm) { const listItem = document.createElement('li'); listItem.textContent = item.name; document.getElementById('your-list').appendChild(listItem); } xhr.onload = function() { nearTerm = JSON.parse(this.responseText); };
Correct Approach:
Move your loop inside the onload callback to ensure you only iterate once the data is available:
const xhr = new XMLHttpRequest(); xhr.open('GET', 'https://api.trello.com/1/boards/your-board-id/cards?key=your-key&token=your-token'); xhr.onload = function() { if (this.status >= 200 && this.status < 300) { const nearTerm = JSON.parse(this.responseText); const list = document.getElementById('your-list'); // Now we're sure nearTerm has data! for (const card of nearTerm) { const listItem = document.createElement('li'); listItem.textContent = card.name; // Match Trello's actual field name list.appendChild(listItem); } } else { console.error(`API Request Failed: ${this.statusText}`); } }; xhr.onerror = function() { console.error('Network error occurred while fetching Trello data'); }; xhr.send();
2. Trello's API Response Structure Doesn't Match Your Example Array
Your test array might be a flat list of objects, but Trello's API could return nested data. For example:
- If you're fetching a board, the cards might live under a
cardsproperty - If you're fetching a list, the response might be an object with a
cardsarray inside
Fix: Add a console.log(nearTerm) right after parsing the response to inspect the actual structure. Adjust your loop to target the correct nested array. For example:
// If Trello returns { cards: [...] } const nearTerm = JSON.parse(this.responseText).cards;
3. Your DOM Element Isn't Loaded When the Script Runs
If your script runs before the HTML list exists in the DOM, document.getElementById('your-list') will return null, and you won't see any items added.
Fix: Either:
- Place your script just before the closing
</body>tag, or - Wrap your code in a
DOMContentLoadedevent listener to wait for the page to fully load:
document.addEventListener('DOMContentLoaded', function() { // Your XHR and list-rendering code goes here });
Quick Debugging Tip
Always check your browser's developer console (F12) for errors—if the API request is failing (e.g., invalid API key/token, wrong endpoint), you'll see error messages there that point you to the issue.
内容的提问来源于stack exchange,提问作者christophebazin

