Javascript getJSON函数仅从本地主机上的url获取数据
我使用下面的函数从api中获取代码,该api在本地主机上运行良好,但在实时环境(即网站)中失败Javascript getJSON函数仅从本地主机上的url获取数据,javascript,jquery,api,getjson,Javascript,Jquery,Api,Getjson,我使用下面的函数从api中获取代码,该api在本地主机上运行良好,但在实时环境(即网站)中失败 $.getJSON('//www.geoplugin.net/json.gp?jsoncallback=?', function (data) { // console.log(JSON.stringify(data, null, 2)); console.log(JSON.stringify(data.geoplugin_continentCode)); }); 我在控制台中看到的警告是
$.getJSON('//www.geoplugin.net/json.gp?jsoncallback=?', function (data) {
// console.log(JSON.stringify(data, null, 2));
console.log(JSON.stringify(data.geoplugin_continentCode));
});
我在控制台中看到的警告是
加载具有源的的的失败
“”
我不知道为什么它在网站上失败了
SSL版本可能会出现一些问题,因为我不确定,因为我在fiddle上尝试了它&它工作正常
更新
因为问题是由于跨域问题造成的,因为此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);
}
});
整个问题是什么?
您想访问第三个站点(跨域
)。因此,该站点决定您是否可以访问它。当一个站点提供一项服务(类似于您使用过的geo
服务)时,它会确定其服务的哪个部分是免费的
在您的情况下,如果源站点的协议是http
(如localhost
),而dest站点(服务提供商站点)也是http
,则您可以使用上述代码访问此地理服务(因为第三个站点现在允许这样做)。但是,如果您想从https
站点访问此服务(我想您现在正在尝试),则geoPlugin
不允许您轻松或免费访问
在这种情况下,目标站点提供另一个url
s并定义用户级别(为特殊服务赚钱)
在act中,如果您的dest站点也是为您自己而设(本例中不是这样),您可以添加对特定referer站点所需的访问权限,但现在
我查看了它的网站以确定。在这种情况下,您必须使用此url:
但这并不是全部!在上面的url中,k
是什么?本网站:
“对于SSL访问,需要API密钥来抵消证书价格和每年12欧元的费用。”
我不知道,但如果您需要它,您应该搜索免费插件(如果存在)或购买它。乍看之下,我在example.com中找不到这段代码。如果您忘记添加,那么您应该将此代码添加到您的网站。您是否正在运行一个广告拦截器,该拦截器对
localhost
有例外,但对您的实时网站没有例外?我的代码正是示例1中显示的代码,黄色是控制台窗口中显示的警告。我也没有广告拦截器。从url中删除?jsoncallback=?
后,它现在向我发出跨浏览器警告跨源请求被阻止:同一源策略不允许在https://www.geoplugin.net/json.gp. (原因:CORS请求未成功)
为什么要删除jsoncallback
?以查看它是否工作或生成不同的错误?谢谢,我后来在调查时也发现了这一点,警告是由于跨域问题。不幸的是,ssl版本不是免费的。所以最终使用了不同的API,支持每月5万次的免费ssl请求。我也会把这一点加到我的问题上。。我会给你的解决方案打上正确的标记,因为它解决了问题。欢迎你:)我很高兴问题解决了。谢谢你在原来的帖子中介绍这项服务。