使用Wikipedia API查询子分类时JS报错,求解决方案
解决维基百科分类查看器的JS报错问题
嘿,这个场景我熟!咱们直接针对你推测的问题来解决,同时保证图片正常获取:
第一步:过滤掉带「(随机名称)」的异常子分类
维基百科API返回的分类数据里,每个分类都有title字段。你可以在拿到返回结果后,先用数组的filter方法把那些标题包含「(随机名称)」的分类排除掉,再去处理剩下的有效分类。举个代码例子:// 假设你已经通过API拿到了目标页面的数据 const pageData = response.data.query.pages[Object.keys(response.data.query.pages)[0]]; // 过滤掉异常分类 const validSubCategories = pageData.categories.filter(cat => { // 这里匹配你说的「(随机名称)」特征,注意括号是中文的 return !cat.title.includes('(随机名称)'); });第二步:独立处理图片获取,不受分类过滤影响
图片数据在API返回的images字段里,和分类是完全独立的数据集。你可以单独提取图片列表,正常请求它们的详情(比如获取图片URL),完全不用管分类过滤的逻辑。示例代码:// 提取所有图片标题 const imageTitles = pageData.images.map(img => img.title); // 循环获取每张图片的实际URL(这里调用维基的图片信息API) imageTitles.forEach(title => { fetch(`https://en.wikipedia.org/w/api.php?action=query&titles=${encodeURIComponent(title)}&prop=imageinfo&iiprop=url&format=json&origin=*`) .then(res => res.json()) .then(imgData => { const imgPage = imgData.query.pages[Object.keys(imgData.query.pages)[0]]; const imgUrl = imgPage.imageinfo[0].url; // 这里把图片URL渲染到页面上 console.log('图片URL:', imgUrl); }) .catch(err => console.warn('获取图片失败:', err)); });额外防护:给分类处理加异常捕获
为了避免还有其他没预料到的异常分类导致报错,你可以在处理每个有效分类时套个try-catch,这样单个分类的问题不会影响整个程序运行:validSubCategories.forEach(cat => { try { // 这里放你查询子分类的逻辑 fetchSubCategoryDetails(cat.title); } catch (error) { console.warn(`处理分类 ${cat.title} 时出错,已跳过:`, error); } });
另外补充一句:维基百科API本身没有直接过滤分类标题的参数,所以在前端做过滤是最直接的方案。只要你把分类处理和图片处理的逻辑分开,就完全不会影响图片的正常获取啦。
内容的提问来源于stack exchange,提问作者mr strap




