3

私は以下を実行しようとしています:

$.getJSON('http://services.digg.com/2.0/story.getTopNews?limit=25&callback=?', function(data) {
    console.log(data);
});

しかし、私は得ています:

story.getTopNews:-1リソースはスクリプトとして解釈されますが、MIMEタイプapplication/jsonで転送されます。story.getTopNews:2Uncaught SyntaxError:予期しないトークン:

私もこのようなことを試しました:

var url = "http://services.digg.com/2.0/story.getTopNews?limit=25";

$.ajax({
    url: url,
    crossDomain:true,
    dataType: "json",
    success:function(data,text,xhqr) {
        console.log(data);
    }
});

私はこれを手に入れます:

XMLHttpRequestはhttp://services.digg.com/2.0/story.getTopNews?limit=25をロードできません。Origin http://sumews.comは、Access-Control-Allow-Originでは許可されていません。services.digg.com/2.0/story.getTopNews?limit=25GET http://services.digg.com/2.0/story.getTopNews?limit=25 undefined(未定義)

どんな助けでも大歓迎です。

4

1 に答える 1

4

クロスドメインAJAXリクエストは、同一生成元ポリシーによって許可されていません。これは、通常の方法でクロスドメインリクエストを実行できないことを意味し、2番目の例のエラーの原因です。

最初の例では、回避策であるJSONPを試しています。これscriptは、外部スクリプトを参照する要素をページに配置することで機能します。外部スクリプトは、関数呼び出しでデータをラップすることによって応答する必要があります。外部スクリプトがこれをサポートしていない場合(そしてdiggがサポートしていないように見える場合)、JSONPの回避策を使用することはできません。

サーバーはJSONデータを送信するため(JSONPをサポートしていないため)、ブラウザーが通常のJavascriptとして解析しようとすると、ブラウザーが混乱します。これが最初のエラーの原因です。


diggJSONPをサポートしているようですが、追加の引数が必要type=javascriptです:

$.getJSON('http://services.digg.com/2.0/story.getTopNews?limit=25&type=javascript&callback=?', function(data) {
    console.log(data);
});

これは私のために働きます。

于 2011-05-15T20:44:17.680 に答える