getJSON 函数仅从本地主机上的 url 获取数据

getJSON function get data from url on localhost only

我使用下面的函数从 api 获取大陆代码,它在本地主机上工作正常但在网站

的实时环境中失败
$.getJSON('//www.geoplugin.net/json.gp?jsoncallback=?', function (data) {
  // console.log(JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data.geoplugin_continentCode));
});

我在控制台中看到的警告是

Loading failed for the with source “https://www.geoplugin.net/json.gp?jsoncallback=jQuery16407901144106031991_1537089290623&_=1537089292750”.

我不确定为什么它在网站上失败 https://www.example.com

SSL 版本会不会有问题,因为我不确定,因为我在 fiddle 上尝试过,它工作正常 http://jsfiddle.net/om8ahkp3/

更新

因为问题是由于跨域问题造成的,因为这个 api 使用了不同的 url ssl 版本。我无法使用此 ssl 版本,因为它不是免费的。

所以最终使用了另一个 api,它有免费选项,每月也限制为 50k 请求。

$.ajax({
                url: 'https://api.ipgeolocation.io/ipgeo?fields=is_eu& excludes=ip&apiKey=YOURKEY',
                dataType: 'json',
                success: function (json) {
                    console.log("json.is_eu " + json.is_eu);
                }
            });

整个问题是什么? 您想访问第三个站点 (crossDomain)。 因此,该站点决定您是否可以访问它。当一个站点提供一项服务(类似于您使用过的 geo 服务)时,它决定了它的哪部分服务是免费的。

在您的情况下,如果您的源站点的协议是 http(如 localhost)并且目标站点(服务提供商站点)也是 http,您可以访问此使用上述代码的地理服务(因为第三个站点现在允许这样做)。但是,如果您想从 https 站点访问此服务(我想您现在正在尝试这个),geoPlugin 不允许您轻松或免费!

在这种情况下,目标站点提供另一个 urls 并定义用户级别(为特殊服务赚钱。)。

实际上,如果您的目标站点也是您自己的站点(在本例中不是),您可以添加对特定引荐站点的所需访问权限,但现在...

我看看它的网站就确定了。在这种情况下,您必须使用此 url:

https://ssl.geoplugin.net/json.gp?k=yourAPICode

但这还不是全部!上面url中的k是什么?此站点 writes"For SSL access, an API Key is required to offset certificate prices and costs €12 per year."

我不知道,但如果您需要它,您应该搜索免费插件(如果存在)或购买它。