【问题标题】:getJSON function get data from url on localhost onlygetJSON 函数仅从 localhost 上的 url 获取数据
【发布时间】:2019-02-20 11:47:19
【问题描述】:

我使用以下函数从 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 版本可能会出现一些问题,因为我不确定,因为我在 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);
                }
            });

【问题讨论】:

  • 乍一看,我在您的 example.com 中找不到此代码。如果您忘记添加,则应将此代码添加到您的网站。
  • 您是否正在运行一个广告拦截器,它对localhost 有一个例外,但对您的实时网站却没有?
  • 我的代码正是示例一中显示的内容,黄色是控制台窗口中显示的警告。我也没有广告拦截器。从 url 中删除 ?jsoncallback=? this 后,它现在给我跨浏览器警告 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.geoplugin.net/json.gp. (Reason: CORS request did not succeed)
  • 为什么要删除jsoncallback
  • 查看它是否有效或产生不同的错误?

标签: javascript jquery api getjson


【解决方案1】:

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

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

在这种情况下,目标站点提供另一个urls 并定义用户级别(以获取特殊服务的资金。)。

实际上,如果您的目标站点也是为您自己准备的(在这种情况下并非如此),您可以添加对特定引荐站点的所需访问权限,但现在...

我看看它的网站是肯定的。在这种情况下,您必须使用此网址:

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

但这还不是全部!以上网址中的k 是什么?本站writes: “对于 SSL 访问,需要 API 密钥来抵消证书价格和每年 12 欧元的费用。”

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

【讨论】:

  • 谢谢,我后来在调查时也发现了,警告是由于跨域问题。不幸的是,ssl 版本不是免费的。所以最终使用了不同的 API,它支持每月 50K 的免费请求,并提供 ssl 支持。也会将其添加到我的问题中。我会将您的解决方案标记为正确,因为它解决了问题
  • 不客气 :) 我很高兴问题解决了。感谢您在原始帖子中介绍该服务。
猜你喜欢
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多