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 的安全性就会大大降低。想象一下,你访问了我的网站,一些隐藏的 JavaScript 从 Gmail 下载了你所有的新电子邮件,解析它们,然后将它们发送到我的服务器。如果不是同源政策,这将是可能的。

JSONP 很好,因为它为服务可以选择加入的跨域请求提供了一种解决方法。如果一个服务想要跨域访问,那么它可以用 JSONP 编写。这可以防止不知情的跨域服务,同时允许服务自愿跨域可用性。

Firebug 控制台中的红色文本表示什么?

它可能表明违反了同源策略。

于 2012-12-16T16:40:09.960 回答