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。 Access-Control-Allow-Origin 不允许来源“http://localhost:4448”。”

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

4

2 回答 2

0

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

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

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

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

于 2012-12-15T02:53:49.967 回答
0

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

于 2012-12-15T01:57:43.953 回答