函数间传递API返回对象时出现undefined问题求助
问题解决方案
1. 为什么会显示[object Object]
你在sortDisruptions函数里用字符串拼接的方式输出对象:
console.log(`look at this data ` + data)
当字符串与对象通过+连接时,JavaScript会自动将对象转换为默认字符串形式[object Object]。要正确查看对象的完整内容,改用以下方式:
// 直接输出对象,保留可展开的结构 console.log(data) // 用逗号分隔字符串和对象,同时保留两者格式 console.log(`look at this data `, data) // 转成格式化的JSON字符串,适合查看完整结构 console.log(`look at this data `, JSON.stringify(data, null, 2))
2. 确认数据传递状态
从代码逻辑看,then回调中已经成功拿到API返回的response并传递给sortDisruptions,只要API正常响应,data不会是undefined。先检查then里的console.log(response)是否输出了预期的数组/对象,确认API返回数据正常。
3. 优化AJAX逻辑(可选)
jQuery的$.ajax支持Promise链式调用,可将complete中的DOM操作移到then回调内,确保只有在请求成功后才更新页面,避免逻辑分散:
app.getDisruptionData = () => { $.ajax({ url: "https://data.edmonton.ca/resource/5yvt-mcye.json", method:"GET", dataType: "json", data: { "$limit" : 500000, "$$app_token" : "J33yX1FYA0vwnOA36tGBFLd6l" } }).then((response) => { console.log(response); app.sortDisruptions(response); // 仅在请求成功后更新DOM $serviceDisruptions.empty(); const htmlToAppend = ` <li class="stationGrid"> <div>ROUTE</div> <div>DESCRIPTION</div> <div>DISRUPTION START</div> <div>EXPECTED END TIME</div> </li>`; $serviceDisruptions.append(htmlToAppend); }).always(() => { // 无论请求成败,定时触发下一次请求 setTimeout(app.getDisruptionData, 300000); }).catch((error) => { // 捕获请求失败的错误,便于排查 console.error('API请求失败:', error); }); }
4. 排查undefined问题
如果确实出现data为undefined的情况,按以下步骤排查:
- 打开浏览器控制台的Network面板,查看API请求的响应内容,确认服务端是否返回了有效数据
- 检查请求是否失败:通过
catch回调捕获错误信息,定位问题原因
内容的提问来源于stack exchange,提问作者user19703227
相关产品推荐
相关产品推荐

