2017-04-23 57 views
1

如果没有IPv6或IPv4地址可用于if/else语句以用于以下jQuery函数,我将如何显示?如果没有该类型的IP地址可用,请求将失败。如果jQuery AJAX请求成功/失败,则执行条件代码

$(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

您需要在每次调用的成功函数中进行验证。我猜测这个调用返回一个IP是否可用,所以用你有的回报进行验证,并相应地改变“输出”。 –

+0

你介意说明你的意思吗?我有点小菜。 – Conserta

回答

1

你想做些什么取决于你是否得到答案,或者没有答案(无法连接)。

 

因为通过AJAX接收JSON是异步的,你不能在这种情况下,使用常规的if/else声明。相反,你应该使用jQuery提供的callbacks

为了确保特定的顺序,你可以做两件事情:

  1. 在一个给定的顺序执行的回调;或
  2. 将数据放在页面上的指定位置。

我会证明后一种选择。

$(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。
无论当前使用哪种服务,这个想法都是一样的。

+0

再次有点魔力,谢谢。我将.text改为.html以支持我的一些内联html代码。很棒! – Conserta

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()回调函数中返回的数据的好主意。