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
不允许您轻松或免费!
在这种情况下,目标站点提供另一个 url
s 并定义用户级别(为特殊服务赚钱。)。
实际上,如果您的目标站点也是您自己的站点(在本例中不是),您可以添加对特定引荐站点的所需访问权限,但现在...
我看看它的网站就确定了。在这种情况下,您必须使用此 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."
我不知道,但如果您需要它,您应该搜索免费插件(如果存在)或购买它。
我使用下面的函数从 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
不允许您轻松或免费!
在这种情况下,目标站点提供另一个 url
s 并定义用户级别(为特殊服务赚钱。)。
实际上,如果您的目标站点也是您自己的站点(在本例中不是),您可以添加对特定引荐站点的所需访问权限,但现在...
我看看它的网站就确定了。在这种情况下,您必须使用此 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."
我不知道,但如果您需要它,您应该搜索免费插件(如果存在)或购买它。