首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Wikipedia API+跨源请求

Wikipedia API+跨源请求
EN

Stack Overflow用户
提问于 2018-05-31 02:06:38
回答 2查看 0关注 0票数 0
代码语言:javascript
复制
var WikipediaCORS=
    {
    setMessage:function(msg)
        {
        var span=document.getElementById("id1");
        span.appendChild(document.createTextNode(msg));
        },
    // Create the XHR object.
    createCORSRequest:function(url)
        {
        var xhr = new XMLHttpRequest();


        if ("withCredentials" in xhr)
            {
            xhr.open("GET", url, true);
            }
        else if (typeof XDomainRequest != "undefined")
            {
            xhr = new XDomainRequest();
            xhr.open(method, url);
            }
        else
            {
            return null;
            }
        xhr.setRequestHeader("Access-Control-Allow-Credentials", "true");
        xhr.setRequestHeader("Access-Control-Allow-Origin","*");
        return xhr;
        },
    init:function()
        {
        var _this=this;
        var url = 'http://en.wikipedia.org/w/api.php?action=opensearch&search=Javascript&format=json';
        var xhr = this.createCORSRequest(url);
        if (!xhr)
            {
                this.setMessage('CORS not supported');
                return;
            }

        xhr.onload = function()
            {
                _this.setMessage(xhr.responseText);
            };
        xhr.onerror = function()
            {
                _this.setMessage('Woops, there was an error making the request.');
            };
        xhr.send();
        }
    };

但是脚本失败了('xhr.onerror'被调用),该如何解决它?

EN

回答 2

Stack Overflow用户

发布于 2018-05-31 10:11:54

发送CORS头以允许请求脚本访问内容。

维基百科正在发送CORS,而不是你。

从链接的页面:

MediaWiki API还要求提供源作为请求参数,适当地命名为“origin”,它与CORS协议所需Origin头相匹配。请注意,此标头必须包含在任何请求前请求中,因此即使对于POST请求,也应该包含在请求URI的查询字符串部分中。 如果CORS原点检查通过,MediaWiki将在响应中包含Access-Control-Allow-Credentials:true标头,因此可以发送认证cookie。

这意味着你必须发送一个Origin头文件来告诉维基百科你来自哪里。

发送此来源标题:

代码语言:javascript
复制
xhr.setRequestHeader("Origin", "http://www.yourpage.com");

Access-Control-Allow-*标题是响应标题,而不是请求标题。

维基百科还需要内容类型json:

代码语言:javascript
复制
xhr.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
票数 0
EN

Stack Overflow用户

发布于 2018-05-31 11:43:35

在你的jQuery URL中包含下面的参数。

运行Codepen

代码语言:javascript
复制
$.getJSON("https://en.wikipedia.org/w/api.php?action=query&format=json&gsrlimit=15&generator=search&origin=*&gsrsearch=" + q, function(data){
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100004644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档