请给我一个简单的提示,在哪里挖!
我有多个IP,需要在每个IP旁边显示位置。
我通过
列出了数组中的IPSstruct LinkedListNode *head = linkedList.head;
我可以通过输入框
获取每个位置var table = document.createElement('table');
table.innerHTML = forext;
var ips = [].slice.call(table.querySelectorAll('a[href*="?ip="]')).map(anchor => anchor.textContent).join("\n");
8.8.8.8
8.8.4.4
...
但我需要的是打印IP及其旁边的位置:
所以,我有这个:
$('.send').on('click', function(){
$.getJSON('https://ipapi.co/'+$('.ip').val()+'/json', function(data){
$('.city').text(data.city);
$('.country').text(data.country);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="ip" value="8.8.8.8">
<button class="send">Go</button>
<br><br>
<span class="city"></span>,
<span class="country"></span>
但我需要这个
8.8.8.8
8.8.8.8
如何通过http://freegeoip.net/json/继续整个阵列?谢谢。
更新1:尝试使用:ips [i]
8.8.8.8 -Mountain View, US
8.8.8.8 -Mountain View, US
...
答案 0 :(得分:0)
首先,你真的希望你的IP是一个字符串数组,而不是一个字符串。因此,您应该更改var ips = ...
的声明并从最后删除.join("\n")
- 这会将您方便的IP字符串列表转换为单个字符串,其中IP由换行符分隔,您不需要不想要。
然后,如果您有一个类似ips = ['8.8.8.8', '8.8.4.4', ... ];
...然后您可以通过以下方式获得您描述的输出:
var ipLocations = [];
for (var ip of ips) {
$.getJSON('https://freegeoip.net/json/' + ip, function(data) {
// could also use data.country_name, or any other property in the returned JSON
var outputString = data.ip + ' - ' + data.city + ', ' + data.country_code;
ipLocations.push(outputString);
});
}
现在您有一个包含IP地址+位置的字符串数组,如您所述。如果您现在想要将 THAT 转换为单个字符串,则可以执行ipText = ipLocations.join('\n');
以使换行字符分隔输出行。
如果您要将此文本输出到HTML文档中,您可能希望加入<br>
而非\n
,有许多上下文字符如{{1}将被忽略,你最终将所有输出都放在一行上。
<强>更新强>
我的原始答案中有一些非常愚蠢的错误,其中主要是我混合了Python和JavaScript语法(facepalm)。修复它们后,此代码可以正常工作。话虽如此,有一些需要注意的警告,以及你应该真正尝试理解的Update 1代码中的一些错误。
首先,代码中的问题:
\n
的第4行中删除.join("\n")
,所以它仍然只是一个字符串而不是一个字符串数组。这意味着你的for循环实际上是在ips
字符串中的每个字符上循环,而不是完整的IP地址。ips
。 data.ips[i]
变量包含对您的AJAX请求的JSON响应,但是通过jQuery自动从JSON字符串转换为实际的JavaScript对象。它只包含响应中包含的属性。在这种情况下,响应始终具有data
属性,因此您可以访问ip
。但是,data.ip
是您创建的变量 - ips
不存在,因此您无法访问其索引。
data.ips
语法,您还可以使用名为for...of
的循环变量来代替。但是,您需要了解ip
和ip
不是同一个变量,即使它们在这种情况下总是具有相同的值。 有了这个,你在评论中提出了一个非常重要的观点 - 函数data.ip
是异步的,所以(忽略其他问题)代码就像你一样在Update 1中写下它可能不会达到预期效果。调用$.getJSON()
后的代码将继续运行,即使您的AJAX请求还没有响应,所以如果您立即访问getJSON
数组,它可能只有一些输出字符串,甚至是空的。
我不会解释如何等待非阻塞代码,因为这是一个完全不同的问题。考虑到你对JavaScript的熟悉程度,我也担心它会让事情变得更加混乱。但是,如果您只想要一个快速的解决方案,为您提供您期望的结果,即使它不是最佳实践,那么您可以使用ipLocs
函数而不是ajax
。这允许您明确告诉jQuery同步发送您的AJAX请求,这意味着它将在继续运行您的代码之前等待响应。但是,您需要注意同步请求可能会暂时锁定您的浏览器,在请求完成之前阻止任何其他操作。那个版本看起来像这样:
getJSON