javascript - 如何使用 JavaScript (jQuery) Ajax 从外部 URL 获取 JSON?
问题描述
我想使用 JavaScript (jQuery) Ajax 从 URL 获取一些 JSON 内容,但它总是无法加载数据。
我的代码很简单:
<div id="content">
loading...
</div>
console.log("jQuery Version: " + jQuery.fn.jquery);
$.ajax({
type: "GET",
url: "https://www.teamspeak.com/versions/server.json",
dataType: "json",
success: function(data){
$("#content").html(data);
console.log("SUCCESS: " + JSON.stringify(data));
},
error: function(data){
$("#content").html("Failed to load data. " + JSON.stringify(data));
console.log("ERROR: " + JSON.stringify(data));
},
complete: function(data){
console.log("COMPLETED: " + JSON.stringify(data));
},
});
该页面始终显示以下内容:
Failed to load data. {"readyState":0,"status":0,"statusText":"error"}
当我尝试dataType: "jsonp"
(使用P
)而不是 时dataType: "json"
,它会显示以下内容:
Failed to load data. {"readyState":4,"status":200,"statusText":"load"}
所以......它成功了,但它仍在加载?我不明白。当我在浏览器中打开上述 URL 时,我可以看到application/json
格式化的数据。
在此处检查代码的结果:https ://jsfiddle.net/j2t91osz/1/
解决方案
您无法完成调用,因为您正在向位于主机地址 ( www.teamspeak.com
) 的 URL 发出请求,该主机地址 ( ) 与部署 HTML 页面的地址 ( ) 不同jsfiddle.net
。
查看控制台中显示的消息:
从源“https://fiddle.jshell.net”访问“https://www.teamspeak.com/versions/client.json”的 XMLHttpRequest 已被 CORS 策略阻止:否“访问控制允许源” ' 请求的资源上存在标头。
当这种情况发生时(不同的主机),您的请求受同源策略的约束。在这种情况下,浏览器将只允许请求完成,如果响应包含一些特定的标题(例如Access-Control-Allow-Origin
)授权调用。更多细节在这里。
如何让它发挥作用?
- 如果您有权访问服务器,则可以将其配置为返回必要的标头。(每种服务器/语言都有办法做到这一点 -在此处查看一些解决方案。)
- 如果你不控制服务器,你可以镜像它(通过反向代理等工具,或者通过一个非常简单的应用程序来转发呼叫)并在其中包含所有必要的标头。
- 出于演示目的,您还可以使用免费的 CORS 代理,例如https://allorigins.win/。查看演示:https ://jsfiddle.net/acdcjunior/rc14skf8/ (只是不要在生产中使用它,因为他们将能够检查您的所有流量,您不能指望他们的可用性和许多其他问题)
推荐阅读
- php - 在 WooCommerce 中更新与订单相关的地址字段
- asp.net-core - 在 Web 表单中使用占位符值作为密码
- swift - 将python中的会话令牌转换为swift缺少什么?
- powershell - Powershell - 我如何处理这种类型的下拉
- c++ - 对“const QVariant”类型的引用无法绑定到“void”类型的右值
- html - 在电子邮件、移动电子邮件构建器和最佳 HTML 品牌模板构建器上翻译的自定义 Web 字体
- swift - Swift 不透明类型作为返回类型?
- python - 如何使用请求更改某些内容的 HTML 值?
- docker - 无法在 Windows 上提取硒图像
- javascript - 无法通过 DiscordJS 中的不同范围传递变量