1

jQuery で次の API 呼び出しを使用してデータを取得しています。クロスオリジンドメインの問題を回避しているように見える最後に追加?callback=?しました。これを含めないと、クロスドメインエラーが発生します。

クロムでは、「リソースはスクリプトとして解釈されましたが、MIME タイプで転送されました」と表示されますtext/html

返される応答は ですContent-Type: text/html; charset=UTF-8

ChromeコンソールResourcesで応答を確認できます。しかし、JavaScript で応答を操作するにはどうすればよいでしょうか?

$.getJSON("http://api.visistat.com/stats-api-v2.php?key=skx79q0pyu01.&qt=idd&d=json&sdate=2012-08-26&edate=2012-08-28?callback=?", function(json) {
    console.log(json);
});

API を変更するアクセス権がありません。

更新: http://jsfiddle.net/4VEHR/5/ などの YQL を使用して回避しようとしています。

このプラグインも役立つようです: https://github.com/padolsey/jQuery-Plugins/tree/master/cross-domain-ajax/

4

3 に答える 3

1

スクリプトを制御してapi.visistat.com変更できる場合をstats-api-v2.php除き、サービスに連絡して、応答で送信されるヘッダーを修正するよう依頼する以外にできることはありません ( Content-Type: text/jsonPHP のデフォルトは であるのに対し、が必要ですtext/html)。ブラウザー側では、Javascript がデータを操作する前に警告が表示されます — jQuery は<script>API URL をソースとして要素をインスタンス化し、ブラウザーは応答が受信されるとすぐにコンテンツ タイプの不一致に気付きます。それをjQueryに戻します。

ただし、この警告は無害です。本当の問題は、使用しているサービスが JSONP をサポートしていないことですcallback。JSONP の結果を強制するために jQuery ドキュメントで指定されているパラメーターを指定しますが、サービスは実際には有効な JSONP を生成しません (プレーンな JSONP を生成します)。API リクエストで に変更しようとしましd=jsonたが、サービスでサポートされていないようです。d=jsonpクロスドメインの問題を回避するために、サービスから JSONP の結果を取得する方法を見つけるか、ドメインにサーバー側のプロキシを実装する必要があります。

于 2012-08-28T10:43:51.443 に答える
0

このように$.ajaxを使用します

$.ajax({
    url:"http://api.visistat.com/stats-api-v2.php?key=skx79q0pyu01.&qt=idd&d=json&sdate=2012-08-26&edate=2012-08-28",
    dataType:'jsonp',
    crossDomain:true,
    success:function(data){alert(data);}
})​;​
于 2012-08-28T10:46:59.807 に答える
0

そのcallbackパラメータを使用する場合、jquery に jsonP を使用するように指示します

これは、応答を次のようにラップする必要があることを意味します。

callback( ...your data...);

JSONP は、callback(データをフェッチできる) メソッドを作成することを意味します。あなたのURLにsrc属性を持つscripttagを追加します。スクリプトがロードされ、コールバック メソッドが実行されます。あなたはデータを持っています。

これを修正するために API にアクセス/変更できない場合は、jsonP を使用できません。

あなたはCORSについて話します。それは別の話です...正しいヘッダーを送信していることを確認する必要があります。

http://enable-cors.org/

基本的に、送信することを確認してくださいAccess-Control-Allow-Origin: your domain (または * すべてを許可する)

それができない場合、唯一の選択肢はプロキシです。プロキシは一種のミドルウェアです。スクリプトにリクエストを送信すると、スクリプトがデータを取得して返します。たとえば、php プロキシ。asp、jsp、flash、さらには Java アプレットでも同じことができます。

于 2012-08-28T10:51:11.437 に答える