如果以下jQuery函数的if / else语句没有IPv6或IPv4地址可用,我将如何显示?如果没有该类型的IP地址,请求将失败。
$(function() {
$.getJSON("https://v6.ident.me/.json",
function(json) {
document.write("Your IPv6 Address: ", json.address);
}
);
$.getJSON("https://v4.ident.me/.json",
function(json) {
document.write("Your IPv4 Address: ", json.address);
}
);
});
我还想知道确保地址输出顺序一致的最佳方法。
答案 0 :(得分:1)
你想要做的事情取决于你是否得到答案,或者没有答案(连接失败)。
因为通过AJAX接收JSON是异步的,所以在这种情况下你不能使用常规的if/else
语句。相反,您应该使用jQuery提供的callbacks。
要确保特定订单,您可以做两件事:
我将演示后一种选择。
$(function() {
function checkIP(version) {
$.get('https://ipv' + version + '.myip.info/', 'text')
.done(function(ip) {
$('#v' + version).text('IPv' + version + ': ' + ip);
})
.fail(function() {
$('#v' + version).text('IPv' + version + ': not available');
});
}
checkIP(4);
checkIP(6);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="v4"></p>
<p id="v6"></p>
由于问题中最初使用的服务已关闭,因此此答案使用不同的网址 因此,数据也是纯文本而不是JSON。您可以查看此帖子的older versions,了解如何处理JSON 无论当然使用哪种服务,这个想法都是一样的。
答案 1 :(得分:1)
我认为您的问题已得到正确回答,我发布此答案以帮助解释我的评论,希望它有所帮助。
所以,我认为如果找不到IP,你正在拨打IP地址的电话会返回某种错误,但我发现如果找不到IP就会失败。
无论如何,我的意思的例子如下:
例如,假设如果找不到IP而不是失败,您正在进行的呼叫,它将address
作为null
返回。在这种情况下,要检查您是否拥有正确的IP,您必须在done()
回调函数中对其进行验证。
$.getJSON("https://v4.ident.me/.json")
.done(function(json) {
if(json.address === null) {
document.write("No IPv4");
} else {
document.write("Your IPv4 Address: ", json.address);
}
}).fail(function() {
document.write('Could not determine IP address.');
});
请注意,fail()
回调函数用于未处理的异常,即服务器无法满足的错误。它们通常发生在某些意外的情况下。发生了,这就是为什么仍然要验证done()
回调函数中返回的数据是个好主意。