javascript - 从 javascript 网页获取设备 IP 地址时出现问题

标签 javascript json ip-address

我的网页中有以下 JavaScript 代码:

const configDefault = {

  Bot: {
    // initial sessionAttributes
    sessionAttributes: {},

  },

};

现在我想要的是使用用户打开该网页的设备的ip地址来设置sessionAttributes。基于this SO post我编写此代码是为了获取设备的 ip 地址,但在首先从返回的 json 对象中提取 ip 地址 时遇到问题然后集成这一部分,以便使用 ip 地址 设置上面代码中的 sessionAttributes:

function myIP() {
    $.getJSON('//freegeoip.net/json/?callback=?', function(data) {
  JSON.stringify(data, null, 2));
});
}

上面代码中的 json 对象返回以下示例结构。我想从中获取 ip 字段,并将其设置为顶部代码中的 sessionAttributes :

{
  "ip": "116.12.250.1",
  "country_code": "SG",
  "country_name": "Singapore",
  "region_code": "01",
  "region_name": "Central Singapore Community Development Council",
  "city": "Singapore",
  "zip_code": "",
  "time_zone": "Asia/Singapore",
  "latitude": 1.2931,
  "longitude": 103.8558,
  "metro_code": 0
}

我是 JavaScript 新手,所以我无法找到一种方法来做到这一点。谁能帮助我以正确的方式构建这个结构?

更新:我当前的代码位于 http://js.do/code/158408 。运行时,我在 $ 符号上收到错误

const configDefault = {

      Bot: {
        // initial sessionAttributes
        sessionAttributes: {},

      },

    };

function myIP() {
        $.getJSON('//freegeoip.net/json/?callback=?', function(data) {
      return JSON.parse(data);
    });
    }

const ipInformation = myIP();
configDefault.Bot.sessionAttributes.ip = ipipInformation.ip;

最佳答案

您应该使用 JSON.parse 而不是 stringify。

const ipInformation = JSON.parse(data);

console.log(ipInformation.ip);

const configDefault = {
  Bot: {
    // initial sessionAttributes
    sessionAttributes: {},
  },
};

configDefault.Bot.sessionAttributes.ip = ipipInformation.ip;

console.log(configDefault);

或者如果您想要 sessionAttributes 中的所有 ipInformation。

configDefault.Bot.sessionAttributes = ipipInformation;

由于 $.getJSON 是异步的,您需要在回调中完成所有工作:

let configDefault = {
  Bot: {
    // initial sessionAttributes
    sessionAttributes: {}
  }
};

function myIP(configDefault) {
  $.getJSON("//freegeoip.net/json/?callback=?", function(data) {
    const ipInformation = JSON.parse(data);
    configDefault.Bot.sessionAttributes.ip = ipInformation.ip;
    console.log(configDefault);
    return configDefault;
  });
}

configDefault = myIP(configDefault );

关于javascript - 从 javascript 网页获取设备 IP 地址时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44727321/

相关文章:

javascript - 通过javascript对象循环后动态创建文本框

json - 如何为图表中的所有文本设置字体属性?

C# 从 IP 地址字符串中删除尾随 '\0'

python - 在 Python 中判断 Host 是域名还是 IP

java - 需要一个客户端 API 来确定 IP 地址的地理位置

javascript - Angular Chosen 默认选择不起作用

javascript - Bcrypt 不散列

javascript - 如何在 slider 博主中居中图像

java - 如何同时加载JSP页面并在json文件上写入数据?

javascript - 资源解释为脚本但使用 MIME 类型文本/纯文本传输 - 对于本地文件