2012-12-15 278 views
1
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起源。‘HTTP://本地主机:4448’不是允许通过Access-Control-Allow-Origin“。

我的朋友告诉我,这是一个跨域的Ajax问题。但我不知道如何使它工作...

回答

0

你可以通过在服务器上的网页页眉中添加Access-Control-Allow-Origin:*来达到目的。如果您拥有服务器,但没有成为Google页面的选项,那很好,您需要以不同方式检索数据,而不是直接通过AJAX检索数据。

0

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

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

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

如果Web服务器是可公开访问的,则必须锁定代理脚本以防止滥用(例如,黑客使用它来攻击另一个Web站点)。但是,谈到虐待问题,还有一个更直接的问题。谷歌可能会认为您的查询违反了他们的服务条款,他们可能会随时阻止您的访问。有些方法可以避免被捕获,尽管它们不在你的问题的范围之内。

相关问题