我的网页中有以下 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/