使用 jQuery 的 MediaWiki API 没有响应

发布于 2024-09-26 12:11:49 字数 439 浏览 10 评论 0原文

我试图从维基百科获取一些 JSON 内容:

$.getJSON("http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles="+title+"&format=json", function(data) {
    doSomethingWith(data);
});

但我没有得到任何回应。如果我粘贴到浏览器的地址栏,

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles=jQuery&format=json

我会得到预期的内容。怎么了?

I've tried to get some content from Wikipedia as JSON:

$.getJSON("http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles="+title+"&format=json", function(data) {
    doSomethingWith(data);
});

But I got nothing in response. If I paste to the browser's adress bar, something like

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles=jQuery&format=json

I get the expected content. What's wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

み零 2024-10-03 12:11:49

您需要使用 $.getJSON() 触发 JSONP 行为在查询字符串上添加 &callback=?,如下所示:

$.getJSON("http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles="+title+"&format=json&callback=?", function(data) {
    doSomethingWith(data);
});

您可以在此处进行测试< /a>.

如果不使用 JSONP,您将遇到 同源策略,它会阻止 XmlHttpRequest 获取任何数据后退。

You need to trigger JSONP behavior with $.getJSON() by adding &callback=? on the querystring, like this:

$.getJSON("http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles="+title+"&format=json&callback=?", function(data) {
    doSomethingWith(data);
});

You can test it here.

Without using JSONP you're hitting the same-origin policy which is blocking the XmlHttpRequest from getting any data back.

旧城空念 2024-10-03 12:11:49

正如其他答案所指出的,您正在发出跨域请求。

现在有效且他们都给出的一个答案是使用 JSONP 而不是 JSON,但还有另一种答案称为 CORS 跨源资源共享

然而,尽管 MediaWiki 支持 CORS,但由于它与 Wikipedia 缓存工作方式之间的微妙之处,它尚未在 Wikipedia 上启用。

有一个开放的错误报告可以在维基百科中实现此功能:Enable $wgCrossSiteAJAXdomains for wikimedia网站

解决此问题后,您将能够向维基百科发出跨域 AJAX 请求,而无需从支持 CORS 的浏览器使用 JSONP。所有主流浏览器的最新版本现在都支持 CORS。对于 Internet Explorer,这意味着没有多少人在运行版本 10。版本 9 有一个名为 的替代解决方案,该解决方案没有'没有获得太多人气。

As the other answers point out, you are making a cross-domain request.

The one answer which works now and which they have both given is to use JSONP instead of JSON, but there is another answer called CORS Cross-origin resource sharing.

However, even though CORS is supported by MediaWiki, it is not yet enabled on Wikipedia due to subtleties between it and how Wikipedia's caching works.

There is an open bug report to get this working in Wikipedia: Enable $wgCrossSiteAJAXdomains for wikimedia sites.

Once this is resolved you will be able to make cross-domain AJAX requests to Wikipedia without needing JSONP from browsers which support CORS. The latest versions of all the major browsers now support CORS. For Internet Explorer that means version 10 which not many people are running. Version 9 has an alternative solution called which didn't gain much popularity.

耳钉梦 2024-10-03 12:11:49

如果您从另一个获取数据,则需要使用 getJSONP域,它是“同源策略”的一部分。

编辑

实际上正如 Nick 所说,在查询字符串末尾添加 &callback=? 来调用 getJSONP

You'll need to use getJSONP if your getting data from another domain, it's part of the "same origin policy".

EDIT

Actually what Nick said, slap &callback=? on the end of your query string to invoke getJSONP.

溺深海 2024-10-03 12:11:49

执行 CORS 请求而不是 JSONP 的一种选择是在请求 url 中显式包含参数 origin=*,例如:

var title = "jQuery";

$.getJSON("https://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles="+title+"&format=json&origin=*", function(data) {
    console.log(data.query.pages);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

One option to perform CORS request instead of JSONP is to explicitly include parameter origin=* in request url, for example:

var title = "jQuery";

$.getJSON("https://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles="+title+"&format=json&origin=*", function(data) {
    console.log(data.query.pages);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文