如何修复Ajax响应非对象问题?从iTunes API取数失败
解决iTunes API数据遍历问题
看起来你在调用iTunes API时踩了几个小坑,我帮你梳理下问题和修复方案:
1. API请求参数的致命错误
你当前的请求URL里设置了limit=0,这意味着你要求API返回0条结果,难怪拿不到数据!要获取2条结果,得把limit=0改成limit=2。另外,你参数里写的kind=feature-movie但搜索的是《生活大爆炸》(big bang theory),这其实是剧集,改成kind=tv-episode或者去掉kind参数更合适,不然可能搜不到匹配的电影结果。同时注意URL里的&要换成&,否则API会把它当成参数的一部分,导致请求解析错误。
修正后的请求URL可以是:
const queryTVURL = "https://itunes.apple.com/search?term=big%20bang%20theory&kind=tv-episode&country=US&media=tv&limit=2&lang=en_us&version=2&explicit=Yes";
2. 数据解析与遍历的错误
你提到用JSON.parse(response.results[i].length)遍历,这有两个明显问题:
- jQuery的
$.ajax默认会自动解析JSON响应(只要API返回正确的Content-Type),所以response已经是解析好的JavaScript对象,不需要再用JSON.parse()。 response.results是一个数组,你要遍历它的话,应该先获取数组的长度response.results.length,而不是去取数组单个元素的length属性。
修复后的完整代码
const queryTVURL = "https://itunes.apple.com/search?term=big%20bang%20theory&kind=tv-episode&country=US&media=tv&limit=2&lang=en_us&version=2&explicit=Yes"; $.ajax({ url: queryTVURL, method: "GET", dataType: "json" // 显式指定解析为JSON,避免自动解析异常 }).then(function(response) { // 先检查是否有有效结果返回 if (response.results && response.results.length > 0) { // 遍历结果数组 response.results.forEach(function(item, index) { console.log(`第${index+1}条结果:`, item); // 可按需提取具体字段,比如标题、封面图 console.log("内容标题:", item.trackName); console.log("封面图片地址:", item.artworkUrl100); }); } else { console.log("没有找到匹配的结果"); } }).catch(function(error) { console.error("请求出错:", error); });
额外提示
- 可以直接在浏览器地址栏打开请求URL,查看返回的JSON结构,这样能更清晰地知道要提取哪些字段。
- 加上
.catch()捕获请求错误,能帮你快速排查网络问题或参数配置错误。
内容的提问来源于stack exchange,提问作者Reinaldo Llano
相关产品推荐
相关产品推荐

