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'被调用),该如何解决它?
发布于 2018-05-31 10:11:54
发送CORS头以允许请求脚本访问内容。
维基百科正在发送CORS,而不是你。
从链接的页面:
MediaWiki API还要求提供源作为请求参数,适当地命名为“origin”,它与CORS协议所需的Origin头相匹配。请注意,此标头必须包含在任何请求前请求中,因此即使对于POST请求,也应该包含在请求URI的查询字符串部分中。 如果CORS原点检查通过,MediaWiki将在响应中包含Access-Control-Allow-Credentials:true标头,因此可以发送认证cookie。
这意味着你必须发送一个Origin
头文件来告诉维基百科你来自哪里。
发送此来源标题:
xhr.setRequestHeader("Origin", "http://www.yourpage.com");
Access-Control-Allow-*
标题是响应标题,而不是请求标题。
维基百科还需要内容类型json:
xhr.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
发布于 2018-05-31 11:43:35
在你的jQuery URL中包含下面的参数。
运行Codepen
$.getJSON("https://en.wikipedia.org/w/api.php?action=query&format=json&gsrlimit=15&generator=search&origin=*&gsrsearch=" + q, function(data){
https://stackoverflow.com/questions/-100004644
复制相似问题