【问题标题】:How to make this wiktionary query run with axios?如何使用 axios 运行这个维基词典查询?
【发布时间】:2022-10-23 17:23:17
【问题描述】:

这是我第一次使用axios进行查询...但是现在我不知道进一步了,希望有人能给我建议。

为了使用 React Native 开发字典应用程序,我想像这样查询维基词典

let url = "https://en.wiktionary.org/w/api.php?format=json&action=query&titles={word}&rvprop=content&prop=revisions&redirects=1&callback=?".replace("{word}", word);
...
    axios({
      method: 'get',
      url: url,
    }).then((response) => {
      var results = {
        title: "",
        definitions: [],
        examples: []
      }
      ....
      let data = response.data;
      ...

这个查询本身有效......现在我想根据我的目的调整它:wiktionary-parser

问题出现在这里:

        if(!data || !data.query || !data.query.pages || data.query.pages[-1]) {
            return callback({});
        }

它说

TypeError: Cannot read property 'pages' of undefined

我的查询中的数据的组织方式必须不同于上面提到的维基词典解析器的“$.getJSON...”查询接收到的数据...

但是怎么做?

我试着和

JSON.stringify(response.data)

JSON.parse(response.data)

我究竟做错了什么?有什么建议吗?

提前谢谢你,弗兰克

查询的完整代码是

  function getENWiktionaryInfo(word, wordLanguage, callback) {
    //  getJSON("https://en.wiktionary.org/w/api.php?format=json&action=query&titles={word}&rvprop=content&prop=revisions&redirects=1&callback=?".replace("{word}", word), function (data) {
    //        $.getJSON("https://en.wiktionary.org/wiki/abdico#Latin", function (data) {
    let url = "https://en.wiktionary.org/w/api.php?format=json&action=query&titles={word}&rvprop=content&prop=revisions&redirects=1&callback=?".replace("{word}", word);
    console.log("getENWiktionaryInfo " + url);

    axios({
      method: 'get',
      url: url,
    }).then((response) => {
      var results = {
        title: "",
        definitions: [],
        examples: []
      }

      let data = response.data;
      console.log("DATA "+data);
      const jsonObj= JSON.stringify(response.data)
      //let data = jsonObj;
      var title, content;

   if (!data || !data.query || !data.query.pages || data.query.pages[-1]) {
      return callback({});
    }

    callback(results);
  });
}

(拉丁)单词“res”的纯粹调用是:

https://en.wiktionary.org/w/api.php?format=json&action=query&titles=res&rvprop=content&prop=revisions&redirects=1&callback=?

【问题讨论】:

    标签: axios


    【解决方案1】:

    我希望我没有因为我的问题而打扰您...在这里进行了对话,但是所有 cmets 都消失了?

    无论如何...... Axios 和 fetch(...) 或 getJSON(...) 等其他查询之间肯定存在差异 - 请参阅 discussion herehere

    我试图用谷歌浏览器的控制台重新制定这个......但我无法在那里使用 axios......我试图为此设置 Codesandbox.io,但后来

    Access to XMLHttpRequest at 'https://en.wiktionary.org/w/api.php?format=json&action=query&titles=res&rvprop=content&prop=revisions&redirects=1&callback=?' from origin 'https://k62hb0.csb.app' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
    

    我的最后一个想法是:替换这个查询

    https://en.wiktionary.org/w/api.php?format=json&action=query&titles=res&rvprop=content&prop=revisions&redirects=1&callback=?
    

    这样

    https://en.wiktionary.org/w/index.php?title=res&callback=?&action=raw&origin=*
    

    ......它奏效了......这太令人惊讶了。

    这个不同的查询似乎返回了原始标记文本(不幸的是,我不记得在哪里找到它),但这正是我所需要的。对于未来,我的任务将是学习更多关于 axios 的 javascript 细节等等......

    我想解析这个文本并提取我需要的信息 - 使用 this wiktionary parser mentioned above 作为模板。

    非常感谢所有在这里提供帮助的人!

    亲切的问候,弗兰克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多