gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:26:17 24 4
gpt4 key购买 nike

我正在尝试调用此网络服务: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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com