2017-04-23 35 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()回調函數中返回的數據的好主意。