You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Wikipedia OpenSearch API报错:TypeError: 无法读取undefined的属性'3'

解决Wikipedia OpenSearch API调用的TypeError问题

你遇到的这个TypeError: Cannot read property '3' of undefined错误,核心问题是你误解了Wikipedia OpenSearch API的返回结构。

先看你的代码里的问题:你尝试访问data.results[3][1],但实际上OpenSearch API返回的响应根本没有results这个属性——它直接返回一个纯数组,所以data.results是undefined,自然没法读取它的[3]索引。

先搞懂OpenSearch API的返回结构

当你调用https://en.wikipedia.org/w/api.php?&origin=*&action=opensearch&search=Teatr Wielki&limit=5时,返回的JSON是一个长度为4的数组,结构是这样的:

[
  "Teatr Wielki", // 你传入的搜索关键词
  ["Teatr Wielki", "Teatr Wielki (Poznań)", ...], // 匹配的页面标题数组
  ["", "Teatr Wielki in Poznań is...", ...], // 对应标题的简短描述数组
  ["https://en.wikipedia.org/wiki/Teatr_Wielki", ...] // 对应页面的URL数组
]

修正你的代码

你需要直接操作返回的数组,而不是去访问不存在的results属性。下面是修正后的完整代码,同时优化了空描述的处理:

function getInfo() { 
  let search = "Teatr Wielki"; 
  fetch("https://en.wikipedia.org/w/api.php?&origin=*&action=opensearch&search=" + search + "&limit=5", { 
    headers: { 'Accept': 'application/json', }, 
  })
  .then(response => response.json()) 
  .then(addInfo) 
  .catch (e => requestError(e)); 

  function addInfo(data) { 
    console.log(data); // 这里可以打印出完整的返回数组,确认结构
    // 获取所有描述的数组(对应返回数组的第2个索引,从0开始)
    const descriptionList = data[2];
    // 找到第一个非空的描述
    const info = descriptionList.find(desc => desc.trim() !== '');
    if (info) {
      document.querySelector('#results').innerHTML = info;
    } else {
      document.querySelector('#results').innerHTML = 'Unfortunately, no info was returned for this data.';
    }
  } 

  function requestError(e, part) { 
    console.log(e); 
    document.querySelector('#results').innerHTML = '<br>Oh no! There was an error making a request for this place'; 
  } 
}

为什么之前的索引尝试没用?

你之前试了[0]、[1]等索引,但都是在data.results上操作,而data.results本身就是undefined,所以不管用什么索引都会报错。现在直接用data[0]、data[1]就能访问到返回数组里的对应内容了。

内容的提问来源于stack exchange,提问作者Iwona Hajczewska

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:39:51