1

この Web サービスを呼び出そうとしています:http://www.civicapps.org/datasets/restaurant-inspections

これが私のコードです:

<script>
            $(document).ready(function() {

                function showInspections() {
                    var data = $.ajax({
                                type : 'GET',
                                url : '//api.civicapps.org/restaurant-inspections/',
                                async : false,
                                dataType : 'json',
                                success: function(data){
                                    if(data.status == "ok"){
                                    alert(data);
                                    }
                                }
                            });     
                        }
                showInspections();
            });
        </script>

Firebug Net>XHR は「200 Status OK」を表示しますが、JSON データには応答がありません。同様に、コンソール タブには同じ GET リクエストとステータスが表示されますが、そのテキストは赤で表示されます。

質問:

  • JSON ではなく JSONP でデータを送信する必要があるなど、クロスドメインの問題により、JSON で応答データを受信できませんか? もしそうなら、応答がJSONPで送信されないと仮定して、私の側だけでこれを回避する方法はありますか?
  • Firebug コンソールの赤いテキストは何を示していますか?
4

1 に答える 1

8

JSON ではなく JSONP でデータを送信する必要があるなど、クロスドメインの問題により、JSON で応答データを受信できませんか?

はい。JSONP は、実際には "JSON" (つまり、JSON 形式のデータを返す AJAX 要求) とは大きく異なります。応答は非常によく似ており、jQuery での実装も非常によく似ていますが ('p' を追加するだけです!)、JSONP の実際のアーキテクチャは大きく異なります。実際、JSONP は AJAX でさえありません (AJAX が を使用するものを意味する場合XMLHttpRequest)。<script>JSONP は、動的に生成された要素を含むトリックを使用して、クロスドメインの問題を回避します。

もしそうなら、応答がJSONPで送信されないと仮定して、私の側だけでこれを回避する方法はありますか?

幸いなことに、いいえ。これはあなたにとっては不幸なことかもしれませんが、ウェブにとっては幸運なことです。クライアント側からクロスドメインの問題を回避できるとしたら、Web の安全性ははるかに低くなります。あなたが私の Web サイトにアクセスし、隠し JavaScript が Gmail からすべての新しいメールをダウンロードして解析し、私のサーバーに送信したと想像してください。同一生成元ポリシーがなければ、それは可能です。

JSONP は、サービスがオプトインできるクロスオリジン要求の回避策を提供するため、優れています。サービスがクロスドメインにアクセスできるようにしたい場合は、JSONP で記述できます。これにより、サービスがクロスドメインの可用性を自発的に提供できるようにしながら、無意識のクロスドメイン サービスを防止します。

Firebug コンソールの赤いテキストは何を示していますか?

これはおそらく、同一生成元ポリシーに違反していることを示しています。

于 2012-12-16T16:40:09.960 に答える