2017-06-23 31 views
0

我在网页上有这样的JavaScript代码获得设备的IP地址:问题从一个JavaScript网页

const configDefault = { 

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

    }, 

}; 

现在我想是设置sessionAttributes与其上打开该网页的设备的ip address由用户。基于this SO post我写了这个代码来获得设备的ip address但我有在第一提取ip address出返回json对象的问题,然后整合这一块,这样sessionAttributes在我上面的代码设置与ip address

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; 

回答

1

您应该使用,而不是字符串化JSON.parse。

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); 
+0

我怎么使用这个设置'sessionAttributes'在我上面的代码? – user2916886

+0

我已经更新了我的答案。 – mkaatman

+0

所以'const ipInformation = JSON.parse(data);'会在我的帖子中调用'myIP()'函数? – user2916886