javascript - 为什么公共(public) Web 服务返回 200 OK 但没有 JSON

标签 javascript ajax jquery

我正在尝试调用此网络服务: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 控制台中的红色文本表示什么?

最佳答案

我是否因为跨域问题而未能收到 JSON 格式的响应数据,即数据应该以 JSONP 而不是 JSON 格式发送?

是的。 JSONP 实际上与“JSON”(即返回 JSON 格式数据的 AJAX 请求)有很大不同。尽管响应看起来非常相似并且 jQuery 中的实现非常相似(只需添加一个“p”!),但 JSONP 的实际架构非常不同。事实上,JSONP 甚至不是 AJAX(如果 AJAX 是指使用 XMLHttpRequest 的东西)。 JSONP 通过使用涉及动态生成的 <script> 的技巧来解决跨域问题。元素。

如果是这样,假设响应不会以 JSONP 格式发送,是否有办法仅从我这边解决这个问题?

幸运的是,没有。虽然这对来说可能是不幸的,但对网络来说却是幸运的。因为如果您可以从客户端绕过跨域问题,那么网络的安全性就会大大降低。想象一下,你访问了我的网站,一些隐藏的 JavaScript 从 Gmail 下载你所有的新电子邮件,解析它们,然后将它们发送到我的服务器。如果不是同源策略,那将是可能的。

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

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

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

关于javascript - 为什么公共(public) Web 服务返回 200 OK 但没有 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13903199/

相关文章:

javascript - 如何在 typescript 中使用 angular4 隐藏导航选项卡

javascript - 在 JQuery 中使用 JSON 数组

javascript - onchange 中的 onchange 不起作用

JavaScript 和自执行函数

javascript - 单击带有 phantom.js 的链接并检索文档 html

Javascript,删除/忽略 CSV 文件的最后一行

javascript - NodeJS Express 在重定向期间传递值

javascript - 如何刷新历史记录的页面。状态更改(单击后退按钮时)?

javascript - 使用ajax在页面加载时提交表单输入值

javascript - 打印窗口关闭后执行命令