Access-Control-Allow-Origin不允许使用Origin

时间:2012-12-15 01:53:24

标签: javascript html ajax

function getTotalResultsInfo(gAuthor, gOther) {
// Generate correct http request
var url_to_get = "http://scholar.google.com/scholar?as_q=" + gOther + "&num=" + ret_results + "&as_sauthors=" + gAuthor;

$.getJSON(url_to_get, function (data) {
    totalCount(data);
    document.getElementById("loading").style.display = "none";
});}

它似乎没有用,但给了我

“XMLHttpRequest无法加载http://scholar.google.com/scholar?as_q=&num=100&as_sauthors=daniel。”Access-Control-Allow-Origin 不允许使用“http:// localhost:4448”。

我的朋友告诉我,这是一个跨域的ajax问题。但我不知道如何让它发挥作用......

2 个答案:

答案 0 :(得分:0)

您可以通过在服务器上的网页标题中添加Access-Control-Allow-Origin:*来实现这一目标。如果您拥有服务器但没有成为Google页面的选项,那就没问题了,您需要以不同的方式检索数据,而不是直接通过AJAX。

答案 1 :(得分:0)

出于安全原因,使用XMLHttpRequest从不同的来源(协议,主机名和端口号的组合)加载数据时需要Access-Control-Allow-Origin标头。

如果网站(scholar.google.com)是您的,您可以更改服务器端代码以发送该标头。但是,它是第三方网站,因此您无法做到这一点。除了JSONP API之类的替代访问方法之外,只有一种方法可以解决限制。

您需要在Web服务器上设置proxy script,您可以使用C#,Perl,PHP,Python,Ruby或任何其他编程语言编写。从Web浏览器的角度来看,jQuery的连接将是您的服务器,而不是Google。从谷歌的角度来看,连接将来自您的服务器,而不是来自您的网络浏览器。

如果Web服务器是公共可访问的,则必须锁定代理脚本以防止滥用(例如,黑客使用它来攻击其他网站)。但是,谈到滥用问题,还有一个更直接的问题。 Google可能会认为您的查询违反了他们的服务条款,他们可能随时阻止您的访问。虽然有些方法不在你的问题范围之内,但仍有办法避免陷入困境。

相关问题