我使用下面的函数从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);
}
});
答案 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欧元。”
我不知道,但是如果需要,您应该搜索免费的插件(如果有)或购买。