如果jQuery AJAX请求成功/失败,则执行条件代码

时间:2017-04-23 11:38:46

标签: javascript jquery if-statement

如果以下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);
    }
  );
});

我还想知道确保地址输出顺序一致的最佳方法。

2 个答案:

答案 0 :(得分:1)

你想要做的事情取决于你是否得到答案,或者没有答案(连接失败)。

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

要确保特定订单,您可以做两件事:

  1. 按给定顺序执行回调;或
  2. 将数据放在页面上的指定位置。
  3. 我将演示后一种选择。

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