javascript - 使用以下 Javascript (Ajax) 代码,在 http 上工作正常,但在 https 上不工作
问题描述
我正在使用以下代码进行重定向,如果用户所在的国家/地区不是印度,则将其重定向,否则保持在同一页面上
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
function preloadFunc()
{
$.ajax('http://ip-api.com/json')
.then(
function success(response) {
if(response.country!="India")
{window.location.replace("https://www.google.com/");}
}
window.onpaint = preloadFunc();
</script>
解决方案
当您尝试从 https 发起的站点进行 http 调用时会发生什么:
jquery-1.9.1.min.js:5 混合内容:“https://******”处的页面是通过 HTTPS 加载的,但请求了不安全的 XMLHttpRequest 端点“http://ip-api.com” /json'。此请求已被阻止;内容必须通过 HTTPS 提供。
如果您尝试使用 https 进行此调用,您会得到:
jquery-1.9.1.min.js:5 GET https://ip-api.com/json 403(禁止)
如果您直接在浏览器中尝试https://ip-api.com/json ,您会得到
{"status":"fail","message":"SSL unavailable for this endpoint, order a key at https://members.ip-api.com/"}
顺便说一句,您的代码中还有两个 JS 语法错误。这是一个更正的版本(恐怕它有助于通过 https 返回 ip 内容)。
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
function preloadFunc()
{
$.ajax('https://ip-api.com/json')
.then(
function success(response) {console.log(response);
if(response.country!="India") {
window.location.replace("https://www.google.com/");
}
})
}
window.onpaint = preloadFunc();
</script>
推荐阅读
- swift - SwiftUI,为什么部分视图没有刷新?@State 变量未更新
- audio - Electron MediaRecorder 仅从当前窗口录制音频
- c++ - 为什么我的 While 循环总是显示 Else 条件而不显示是否满足条件
- list - Scheme中列表的非递减列表?
- php - s3 images - 我的 s3 存储桶被黑了吗?
- javascript - 砖块破坏游戏在被球击中后没有从完整的砖块更新为破碎的砖块
- html - 您好,我收到关于 img 的 HTML 代码错误——此时元素输入上不允许使用属性 img
- c++ - 虚拟模板参数中的 SFINAE 和 std::enable_if 根据两个标准选择结构
- php - PHP Get values of checked box using foreach
- ios - 键盘显示时,Swift View 不会向上移动