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

能否通过随机pageId获取Wikidata?维基百科搜索App请求报错解析

问题分析与解决

你的代码出现“Failed to Fetch”错误,主要是三个核心问题导致的,同时补充一些优化建议:

1. URL参数转义错误

你构造endpoint时用了&,这是HTML实体编码的&,但在JavaScript字符串里不需要这种转义——API会把&当成参数名的一部分,直接导致请求参数解析失败,应该替换成普通的&来连接参数。

2. Fetch配置参数错误

Fetch的配置选项里没有type:'cors'这个属性,正确的跨域模式参数是mode:'cors'。

3. CORS权限限制问题

维基百科API默认需要明确的跨域许可,你需要在请求URL里添加origin=*参数,允许任意来源的跨域请求;如果是固定域名部署,也可以填写你的具体域名。

修正后的代码

async function luckySearch(){
    cleanResults();
    try{
        // 扩大随机范围,1-10000内大量pageId对应页面已删除或不存在
        let random = Math.floor(Math.random() * 20000000 + 1);
        let endpoint = `https://en.wikipedia.org/w/api.php?action=parse&format=json&formatversion=2&pageid=${random}&origin=*`;
        let response = await fetch(endpoint,{
            method:'GET',
            headers:{
                accept:'application/json',
            },
            mode:'cors', // 修正跨域模式参数
        });
        if(!response.ok){
            throw new Error(`Error! status: ${response.status}`);
        }
        let json = await response.json();
        // 处理API返回的页面不存在情况
        if(json.error){
            throw new Error(`API Error: ${json.error.info}`);
        }
        // 这里可添加结果渲染逻辑
        console.log(json.parse.title, json.parse.text);
    }
    catch(err){
        console.log(err.message);
        // 可选:捕获到无效pageId时自动重试
        // luckySearch();
    }
}

额外说明

  • 通过pageId请求维基百科内容是完全可行的,parse动作确实支持pageid参数
  • 若你需要请求的是**Wikidata(维基数据)**而非维基百科文章,应该使用Wikidata专属API,比如用wbgetentities动作,参数ids对应Wikidata的Item ID(如Q42),而非维基百科的pageId

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:20:48