使用 AJAX (XMLHttpRequest) 查询 Wikipedia 的 API

Posted

技术标签:

【中文标题】使用 AJAX (XMLHttpRequest) 查询 Wikipedia 的 API【英文标题】:Query Wikipedia's API using AJAX (XMLHttpRequest) 【发布时间】:2011-01-23 09:08:51 【问题描述】:

我正在尝试使用 AJAX (XMLHttpRequest) 实现对*** API 的简单请求。如果我在 Firefox 的地址栏中键入 url,我会得到一个整洁的 XML,那里不费吹灰之力。然而,调用完全相同的网址:

// this is my XMLHttpRequest object
httpObjectMain.open("GET", "http://en.wikipedia.org/w/api.php?action=query&format=xml&prop=langlinks&lllimit=500&titles=kaas", true);
httpObjectMain.send(null);

返回一个空响应。根据 FireBug,我得到 200 OK 响应,但内容是空的。

我怀疑我可能在 GET http 请求的标头上遗漏了某些内容。

帮助! (谢谢!)

【问题讨论】:

【参考方案1】:

The Wikipedia API 确实支持JSONP。 你的查询字符串会变成这样:

http://en.wikipedia.org/w/api.php?action=query&format=json&callback=test&prop=langlinks&lllimit=500&titles=kaas

但是您必须构建 jsonp 处理程序(或者您可以使用您喜欢的库来执行此操作),从您选择的 xml 切换到 json 输出格式并创建回调函数来解析结果并执行您的操作需要在页面上。

【讨论】:

谢谢,这听起来像是一条有待探索的道路。 请记住,使用 JSONP 从技术上讲,您使用的不是 XMLHttpRequest,而是脚本注入技术。 为我工作!解析返回的 JSON 是另一种冒险,但数据返回得很好。 这是一个充实此策略的示例(包括指向有效 JSBin 演示的链接):***.com/a/15293681/589059【参考方案2】:

浏览器不允许您将 XHR 发送到页面所在的域以外的另一个域。这是出于安全目的。

我看到的一种解决方法是在托管页面的域上设置一个代理,它将请求传递到实际的 api 服务器。见http://ajaxpatterns.org/Cross-Domain_Proxy

【讨论】:

以上是关于使用 AJAX (XMLHttpRequest) 查询 Wikipedia 的 API的主要内容,如果未能解决你的问题,请参考以下文章

详解AJAX核心中的XMLHttpRequest对象

使用 XMLHttpRequest实现Ajax

使用 AJAX (XMLHttpRequest) 查询 Wikipedia 的 API

Ajax 服务器响应 XMLHttpRequest | AJAX 教程

AJAX XMLHttpRequest POST

原生Ajax(XMLHttpRequest)