如果以下 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);
}
);
});
我还想知道确保地址输出顺序一致的最佳方法。
最佳答案
你想做些什么取决于你是否得到答案,或者没有答案(连接失败)。
因为通过 AJAX 接收 JSON 是异步的,所以在这种情况下您不能使用常规的 if/else
语句。相反,您应该使用 callbacks jQuery 提供的。
要确保特定顺序,您可以做两件事:
- 按给定顺序执行回调;或
- 将数据放在页面的指定位置。
我将演示后一种选择。
$(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>
由于问题中最初使用的服务出现故障,因此此答案使用了不同的 URL。
因此,数据也是纯文本而不是 JSON。你可以看看older versions阅读这篇文章,了解如何处理 JSON。
当然,无论使用哪种服务,想法都是一样的。
关于javascript - 如果 jQuery AJAX 请求成功/失败,则执行条件代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43570665/