gpt4 book ai didi

javascript - 获取对数组 ipinfo.io 的 Json 响应

转载 作者:行者123 更新时间:2023-11-30 15:31:06 25 4
gpt4 key购买 nike

您好,我在获取用户 IP 和位置方面遇到了问题。 JSON 响应有效,但我在将其放入我的问题数组时遇到问题。每当弹出问题时

"Your current location?"

它变成空白。相反,我希望它打印:

"Your located: IP address from ipinfo.io and Location. Example ip: 123.123.132 Location: USA"

或任何其他方式获取用户 IP 和位置并将其显示为对话框您位于:p:123.123.132 位置:美国。

let questions = [
{text:'What is your name?', audio:'music/openmind.ogg', response : input => 'Hello ' + input + '!' },
{text:'How old are you?', response : input => 'That means you were born in ' + (2017 - input) + '.'},
{text:'Where are you from?', audio:'music/beone.ogg', response: input => 'You are from ' + (input) + '.'},
{text: 'Do you eat healthy?', audio: 'music/becoming.ogg', response: input => 'Acording to my data you are eating ' + (input) + ' and that is healthy!'},
{text: 'What is your time?', audio: 'music/becoming.ogg', response: input => 'Where I am located' + (new Date().toLocaleTimeString()) + 'that is the day!'},
{text: 'What language do you speak', audio: 'music/becoming.ogg', response: input => 'Acording to me you speak: ' + language() + '!'},
{text: 'Your current location?', audio: 'music/becoming.ogg', response: input => 'You are located:' + (response) + '!'},


];

let output = $('#output'),
input = $("#input"),
curQuestion;

function ask() {
let qi = Math.floor(Math.random() * questions.length); //depending on your needs, a check could be added if it's been asked directly before or only recycle questions when all are asked
curQuestion = questions[qi];
setOutput(curQuestion.text);
input.val('');
}

ask(); //first call

function respond(){
let q = curQuestion;
if(q.audio)
new Audio(q.audio).play();
setOutput(q.response(input.val()));
setTimeout(ask, 5000);
}

function setOutput(txt){
output.html($('<h1>').text(txt));
}


$(document).keypress(function(e) {
if (e.which == 13) {
respond();
return false;
}
});

function language () {
var userLang = navigator.language || navigator.userLanguage;
return userLang
}

$.get("http://ipinfo.io", function (response) {
$("#ip").html("IP: " + response.ip);
$("#address").html("Location: " + response.city + ", " + response.region);
$("#details").html(JSON.stringify(response, null, 4));
}, "jsonp");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<link href="css/style.css" rel="stylesheet">
<img src="http://i3.kym-cdn.com/photos/images/original/001/138/377/fcc.gif" class="img-responsive center-block" alt="ffc.gif">
<h1 class="text-center">Hello I am ZENYATTA!</h1>
<br> <br>
<div class="container">
<div class="well">
<div id="output"></div>
</div>

<div class="col-md-2 col-md-offset-5">
<div class="form-group">
<label>Responce:</label>
<input type="text" class="form-control" id="input" value="">
</div>
</div>




</div>


<!-- jquery for enter key press -->
<script src="https://code.jquery.com/jquery-3.0.0.js" integrity="sha256-jrPLZ+8vDxt2FnE1zvZXCkCcebI/C8Dt5xyaQBjxQIo=" crossorigin="anonymous"></script>
<script src="js/s.js"> </script>

最佳答案

您在questions 范围内没有response 所以这样:

let questions = [
...,
{
text: 'Your current location?',
audio: 'music/becoming.ogg',
response: input => 'You are located:' + (response) + '!'
}
];

将不起作用。

您需要以某种方式传递来自 ipinfo.io 的响应。

当你打电话时

$.get("http://ipinfo.io", function (response) {
$("#ip").html("IP: " + response.ip);
$("#address").html("Location: " + response.city + ", " + response.region);
$("#details").html(JSON.stringify(response, null, 4));
}, "jsonp");

您似乎将响应存储在几个 DOM 元素中,因此您可以从那里检索它或只显示这些元素....(我在您的 HTML 中没有看到)

或者将其存储在与questions相同作用域的变量中

let questions = ...    
let ipinfoResponse;
...

$.get("http://ipinfo.io", function (response) {
ipinfoResponse = response;
}, "jsonp");

并且在 response: input => 'You are located:' + (ipinfoResponse) + '!' 中使用 ipinfoResponse 而不是 response >

但请注意,这种方式 ipinfoResponse 在您收到响应之前将是未定义的。您可能应该在需要时调用 ipinfo,并在您有数据时做出响应。

关于javascript - 获取对数组 ipinfo.io 的 Json 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42228765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com