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

时间:2018-09-16 09:22:52

标签: javascript jquery api getjson

我使用下面的函数从api上获取Continent Code,该api在localhost上运行良好,但在网站的实时环境中失败

$.getJSON('//www.geoplugin.net/json.gp?jsoncallback=?', function (data) {
  // console.log(JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data.geoplugin_continentCode));
});

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

  

with源的加载失败   “ https://www.geoplugin.net/json.gp?jsoncallback=jQuery16407901144106031991_1537089290623&_=1537089292750”。

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

我无法确定SSL版本是否存在某些问题,因为我不确定是否在小提琴上尝试过它并且效果很好http://jsfiddle.net/om8ahkp3/

更新

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

因此最终使用了另一个具有免费选项的api,该API每月还可以限制5万次请求。

$.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);
                }
            });

1 个答案:

答案 0 :(得分:3)

整个问题是什么? 您要访问第三个站点(var query = (from i in Items from c in Cases.Where(z => z.Id == i.CaseId).DefaultIfEmpty() from cust in Custs.Where(z => z.Id == c.CustId1 || z.Id == c.CustId2).DefaultIfEmpty() select new { ... }).OrderByDescending(z => z.Item.Id).ToList(); )。因此,该站点决定您是否可以访问它。当站点提供一项服务(您使用过的类似 php composer.phar self-update 服务)时,它将确定该服务的哪一部分是免费的。

在您的情况下,如果源站点的协议为crossDomain(如geo),dest站点(服务提供商站点)也为http,则可以访问此地理服务您上面的代码(因为该第三个站点现在允许这样做)。但是,如果您想从localhost网站访问此服务(我想您正在尝试此操作),http不允许您随意或免费!

在这种情况下,目标站点将提供另外https个并定义用户级别(以获取特殊服务的收入。)

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

我肯定会查看其网站。在这种情况下,您必须使用以下网址:

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

但这还不是全部!以上网址中的geoPlugin是什么?这个网站writes“对于SSL访问,需要使用API​​密钥来抵消证书价格,并且每年需要支付12欧元。”

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