jquery 使用JavaScript查询维基数据API显示与CORS相关的错误

368yc8dk  于 2023-08-04  发布在  jQuery
关注(0)|答案(1)|浏览(73)
  • 我所知道的
  • 使用curl从维基数据API获取数据
  • 使用jQuery从维基数据API获取数据
  • 问题是
  • 这个问题

我所知道的

使用curl从维基数据API获取数据

我知道可以通过维基数据API获取维基数据条目的数据。下面的代码块显示了一个shell命令,该命令使用curl来获取维基数据项Q549037的数据。

$ curl -s 'https://www.wikidata.org/w/api.php?format=json&action=wbgetentities&ids=Q549037'
$ curl -s 'https://www.wikidata.org/w/api.php?format=json&action=wbgetentities&ids=Q549037' | jq | head -n 10
{
  "entities": {
    "Q549037": {
      "pageid": 517337,
      "ns": 0,
      "title": "Q549037",
      "lastrevid": 1899479542,
      "modified": "2023-05-19T21:53:09Z",
      "type": "item",
      "id": "Q549037",

使用jQuery从维基数据API获取数据

我还知道可以使用jQuery来完成同样的工作。下面的代码块显示了使用Jquery获取维基数据项Q549037的数据的HTML代码。

<body>
  <p>This is a paragraph.</p>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  <script>
    $.ajax({
      url: 'https://www.wikidata.org/w/api.php?format=json&action=wbgetentities&ids=Q549037',
      dataType: 'jsonp'
    })
  .done(function(data) {
    if (console && console.log)
      console.log(data)
  })
  </script>
</body>


下面的屏幕截图显示了Mozilla Firefox 113.0和打开的控制台,其中显示了通过Wikidata API获得的数据。


的数据

问题是

我现在尝试使用JavaScript查询维基数据,但不使用Jquery。下面的代码块显示了我所写的内容。

<script>
  const myHeaders = new Headers()
  myHeaders.append("Access-Control-Allow-Origin", "*")
  const request = new Request('https://www.wikidata.org/w/api.php?format=json&action=wbgetentities&ids=Q549037', {
    method: "GET",
    headers: myHeaders
  })

  fetch(request)
  .then((response) => {
    if (response.status === 200) {
      return response.json();
    } else {
      throw new Error("Something went wrong on API server!");
    }
  })
  .then((response) => {
    console.debug(response);
  })
  .catch((error) => {
    console.error(error);
  })
</script>


在Mozilla Firefox 113.0中,此操作失败,并显示以下错误

  • 错误1:Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at <https://www.wikidata.org/w/api.php?format=json&action=wbgetentities&ids=Q549037
  • 错误2:(Reason: CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 200.
  • 错误3:Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at <https://www.wikidata.org/w/api.php?format=json&action=wbgetentities&ids=Q549037>. (Reason: CORS request did not succeed). Status code: (null). > TypeError: NetworkError when attempting to fetch resource.

下面的屏幕截图显示了Mozilla Firefox 113.0,其中显示了上面提到的错误。


问题是

我做错了什么?我希望能够使用JavaScript查询Wikidata,而不必使用Jquery这样的大型库。

pvcm50d1

pvcm50d11#

您需要将&origin=*添加到您的请求URL。请参见API:跨站请求§未经身份验证的CORS请求。

相关问题