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://localhost:4448" は Access-Control-Allow-Origin で許可されていません。」

私の友人は、これはクロスドメイン ajax の問題だと教えてくれました。しかし、私はそれを機能させる方法がわかりません...

4

2 に答える 2

0

セキュリティ上の理由から、XMLHttpRequest を使用して別のオリジン (プロトコル、ホスト名、およびポート番号の組み合わせ) からデータをロードするには、 Access-Control-Allow-Originヘッダーが必要です。

サイト (scholar.google.com) があなたのものである場合は、サーバー側のコードを変更してそのヘッダーを送信できます。ただし、サードパーティのサイトなので、それはできません。JSONP APIなどの代替アクセス方法を除いて、この制限を回避する方法は 1 つしかありません。

C#、Perl、PHP、Python、Ruby、またはその他のプログラミング言語で作成できるプロキシ スクリプトを Web サーバーにセットアップする必要があります。Web ブラウザーの観点からは、jQuery の接続は Google ではなくサーバーになります。Google の観点からは、接続は Web ブラウザからではなく、サーバーからのものになります。

Web サーバーがパブリックにアクセスできる場合は、プロキシ スクリプトをロックして悪用を防ぐ必要があります (ハッカーがそれを使用して別の Web サイトを攻撃するなど)。しかし、虐待といえば、もっと差し迫った問題があります。Google は、あなたのクエリが利用規約に違反していると見なす可能性があり、いつでもあなたのアクセスをブロックする可能性があります。質問の範囲外ですが、捕まらないようにする方法はあります。

于 2012-12-15T02:53:49.967 に答える
0

サーバー上の Web ページのヘッダーに Access-Control-Allow-Origin: * を追加することで、これを実現できます。サーバーを所有しているが、Google ページのオプションにならない場合は問題ありません。AJAX を直接使用するのではなく、別の方法でデータを取得する必要があります。

于 2012-12-15T01:57:43.953 に答える