2

リモート サーバーから JSON データを呼び出そうとしていますが、サーバーは有効な JSONP 形式のデータを返さず、有効な JSON データのみを返します。(バリデータで確認済み)

getJSON リクエスト ( &callback=? を使用) を行うと、有効な JSON が返されますが、有効な JSONP ではないため、コールバック関数がトリガーされません。

返された JSON データにアクセスする良い方法はありますか?

4

3 に答える 3

2

いいえ、全体がどのように機能するかという理由で、JSONP データでなければなりません。基本的には、<script>タグを作成して JavaScript ファイルを含めます...そして、その応答は有効な JavaScript でなければならず、オブジェクト リテラル (それ自体) は有効な JavaScript ではありません。 .

別の方法で考えてみてください。リモート サーバーから JSON を取得できる場合、なぜ JSONP が存在するのでしょうか? :)

于 2010-11-23T17:58:51.940 に答える
2

ええ、それはひどいです。Viddler API (ブラウザー側) で同じ問題が発生しています。JSONデータを送り返していますが、スクリプト化されたJSON-Pインターフェースではありません。

したがって、次の 2 つのオプションがあります。

  1. 人々が言っ​​たように、バックエンド プロキシを使用してサーバー側でリクエストを行います。
  2. 1 つのブラウザー (私の場合は Chromium) のみをサポートする必要がある場合は、「chromium-browser --disable-web-security」などを使用して、「same-origin-policy」ルールを無効にします。これにより、クロスドメイン リクエストを行うことができますが、これは非常に特殊な状況に限られます。

がんばれ!

于 2011-05-08T14:40:51.763 に答える
1

まず、JSON を取得するサーバーが JSONP をサポートしていない場合は、プロキシを使用する必要があります。JSONP をサポートしている場合は、以下のサンプルのようにリクエストをフォーマットする必要があります。$.getJSON(...&callback=?) でコールバックを指定しない場合、リクエストは次のようになります。

http://someurl?callback=123489234982

最後にばかげた数字が付いていて、それはあなたの人生を苦痛にします。したがって、コールバックを指定し、次のようにコードをフォーマットする必要があります。

<script>
     $.getJSON("your url?callback=callbackName", ....);

     function callbackName { do what you want with the json in here }
</script>

それが機能しない場合、サーバーはJSONPをサポートしていません:(これは、使用できるphpプロキシへのリンクです。これは非常に優れており、多くのドキュメントがあります.

http://benalman.com/projects/php-simple-proxy/

于 2010-11-25T19:36:23.517 に答える