首页 > 解决方案 > 使用以下 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>

标签: javascriptjqueryajax

解决方案


当您尝试从 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>

推荐阅读