1

http://en.wikipedia.orgのコンテンツをajax 呼び出しで取得しようとしています。このために、jQuery を使用しています。コードは次のとおりです。

jQuery.ajax({
  url:"http://en.wikipedia.org",
  crossDomain: true,
  dataType: "jsonp",
  jsonpCallback: "myCallback"
});

function myCallBack(data){
  console.log("ok");  
}

問題は、Firebug でこのエラーが発生することです。

SyntaxError: syntax error
<!DOCTYPE html>

したがって、コールバック関数は実行されませんが、html コンテンツはフェッチされると言えます。ある時点で、指定されたタグに遭遇し、このエラーをスローしてスクリプトの実行を停止します。

問題がどこにあるのか分かりますか?

HTMLページのコンテンツを取得する他の方法はありますか? iframe を使用したくないのは、その内容を使用または変更できないことを意味するからです。

4

2 に答える 2

3

Ajax関数はjson提供されたURLからの応答を期待しており、html応答を返すため、構文エラーが発生しています.Chromeデバッガーからも同じエラーが発生します.

更新しました:

あなたがやろうとしていることは、クロスドメインリクエストと呼ばれています。

「セキュリティ上の理由から、スクリプトは他のドメインのコンテンツにアクセスできません。Mozilla にはHTTP アクセス制御に関する長い記事がありますが、肝心なのは、ウェブサイト自体がクロスドメイン リクエストのサポートを追加しなければ、あなたは失敗するということです。」

参照

解決:

この問題は、外部ページを処理するバックエンド スクリプトを用意することで解決できます。同じドメインに常駐するプロキシ サーバーのように、クロス ドメインの問題に直面する必要はありません。そして、あなたはそれらをロードすることができます

$.get(url, success: function(data) { // the url that will fetch the external html page for you, located on the same domain
  console.log("ok");
});
于 2012-12-06T10:29:11.460 に答える
1

ここでの問題は、ドメイン間で呼び出していることです。これに気付いたようで、リクエストに jsonp を使用しているようですが、プルしようとしているドキュメント、つまり wikepedia は jsonp ドキュメントではありません。したがって、ajax が html タグを見つけるとすぐに、jsonp 応答を期待していると定義したため、エラーがスローされます。

クロスドメインの問題により、javascript を使用してドメイン全体で他の Web サイトのデータをプルすることはできません。ここで行っていることを達成したい場合は、データを取得するためにバックエンド言語を使用する必要があります。

便利なリンクはhttp://json-p.org/ です

于 2012-12-06T10:30:57.263 に答える