如何使用/存储JSON响应的值?

时间:2018-07-30 17:22:54

标签: javascript jquery maxmind

我想根据其geoIP确定网站访问者来自哪个国家/地区,因此我可以确定该访问者是否正在访问其特定国家/地区的网站,并通过确认弹出式窗口提示他们,询问他们是否d如果不是,则希望将其重定向。但是,我的JavaScript知识有限/很少。我将如何存储/使用并返回要从JSON响应动态使用的特定值?

例如,我想使用以下国家/地区的iso代码“ US”。

"country": {
    "iso_code": "US",

使用MaxMind的GeoIP2 JavaScript Client API和以下JavaScript:

<script type="text/javascript" src="//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js"></script>

<script type="text/javascript">

var onSuccess = function(location){
  console.log(
  "Lookup successful:\n\n"
  + JSON.stringify(location, undefined, 4)
  );
};

var onError = function(error){
  console.log(
      "Error:\n\n"
      + JSON.stringify(error, undefined, 4)
  );
};

geoip2.city(onSuccess, onError);

</script>

返回的JSON如下所示:

{
  "city": {
    "geoname_id": 5368361,
    "names": {
      "es": "Los Ángeles",
      "fr": "Los Angeles",
      "ja": "ロサンゼルス",
      "pt-BR": "Los Angeles",
      "ru": "Лос-Анджелес",
      "zh-CN": "洛杉矶",
      "de": "Los Angeles",
      "en": "Los Angeles"
    }
  },
  "continent": {
    "code": "NA",
    "geoname_id": 6255149,
    "names": {
      "fr": "Amérique du Nord",
      "ja": "北アメリカ",
      "pt-BR": "América do Norte",
      "ru": "Северная Америка",
      "zh-CN": "北美洲",
      "de": "Nordamerika",
      "en": "North America",
      "es": "Norteamérica"
    }
  },
  "country": {
    "iso_code": "US",
    "geoname_id": 6252001,
    "names": {
      "ru": "США",
      "zh-CN": "美国",
      "de": "USA",
      "en": "United States",
      "es": "Estados Unidos",
      "fr": "États-Unis",
      "ja": "アメリカ合衆国",
      "pt-BR": "Estados Unidos"
    }
  },
  "location": {
    "accuracy_radius": 50,
    "latitude": 34.0669,
    "longitude": -118.3109,
    "metro_code": 803,
    "time_zone": "America/Los_Angeles"
  },
  "postal": {
    "code": "90020"
  },
  "registered_country": {
    "iso_code": "US",
    "geoname_id": 6252001,
    "names": {
      "ja": "アメリカ合衆国",
      "pt-BR": "Estados Unidos",
      "ru": "США",
      "zh-CN": "美国",
      "de": "USA",
      "en": "United States",
      "es": "Estados Unidos",
      "fr": "États-Unis"
    }
  },
  "subdivisions": [
    {
      "iso_code": "CA",
      "geoname_id": 5332921,
      "names": {
        "zh-CN": "加利福尼亚州",
        "de": "Kalifornien",
        "en": "California",
        "es": "California",
        "fr": "Californie",
        "ja": "カリフォルニア州",
        "pt-BR": "Califórnia",
        "ru": "Калифорния"
      }
    }
  ],
  "traits": {
    "autonomous_system_number": 7018,
    "autonomous_system_organization": "AT&T Services, Inc.",
    "isp": "AT&T Services",
    "organization": "AT&T Internet Services",
    "ip_address": "12.125.142.34"
  },
  "represented_country": {
    "names": {}
  }
}

GeoIP2 JavaScript Tutorial

谢谢。

2 个答案:

答案 0 :(得分:0)

您已经有一个Json,然后您可以执行以下操作:

sorted

答案 1 :(得分:0)

对于Emeeus的答复,如果您希望将响应保存在本地以免重复向服务器发送请求或向用户询问相同的问题两次,则可以使用window.localStorage对象。即使用户关闭浏览器,该对象也将在用户浏览器中保留数据,并且该数据可用于您的域。如果您想存储的那一刻只是在用户浏览您的网站时,然后关闭时清除,请使用sessionStorage

您应始终将字符串传递给localStorage的字段。您的代码将类似于:

var geoData;
var onSuccess = function(location){
  window.localStorage.geoData = JSON.stringify(location);
  // ... do whatever you want with location ...
};

// ... on error ...

if (! window.localStorage.geoData)
  geoip2.city(onSuccess, onError);
else
  onSuccess(JSON.parse(window.localStorage.geoData));

请记住,如果JSON无效,JSON.parse可能会引发错误。我建议您将代码用try {...} catch (e) {geoip2.city(onSuccess, onError)}括起来,好像parse失败一样,它将执行catch并可以正常向服务器请求数据。