2016-10-10 34 views
0

你好,這是我的第一個問題。我對JS非常陌生,我需要一個純JS方法來獲取Web訪問者的IP地址並將其顯示給他。我怎樣才能使用GET,並且有人知道我的代碼爲什麼不起作用?如何使用GET方法在純JS中獲取用戶的IP地址?

我的目標是從http://ip-api.com/json

function goHome() { 
    var xhr = XMLHttpRequest(); 
    xhr.open("GET", "http://ip-api.com/json", false); 
    xhr.send(); 
    if (xhr.readyState == 4 && xhr.status == 200) { 
     var response = JSON.parse(xhr.responseText); 
     alert(response.query); 
    } 
} 
+0

看在你的瀏覽器的開發者工具的控制檯是開始弄清楚爲什麼JS行不通一個非常好的方式。 – Quentin

回答

0
var xhr = XMLHttpRequest(); 

的XMLHttpRequest得到的信息是一個構造函數,你必須用new操作者調用它。

var xhr = XMLHttpRequest(); 
-1

這是一個具有異步響應的函數。實施是利用回調最簡單的方法:

function goHome(cb){ 
    var xhr = new XMLHttpRequest(); 

    var fnError = function(type){ 
     return function(){ 
      console.error('error', type, 'has ocurred'); 
      cb({error: type}); 
     }; 
    }; 
    var fnOK = function(evt){ 

     if (evt.currentTarget && evt.currentTarget.readyState === 4 && evt.currentTarget.status === 200) { 
      try{ 
       var response = JSON.parse(evt.currentTarget.responseText); 
       cb(null, response.query) 
      }catch(err){ 
       fnError('parsing xhr failed')(); 
      } 
     } else { 
      fnError('xhr failed')(); 
     } 
    } 


    xhr.open("GET", 'http://ip-api.com/json', true); 

    xhr.addEventListener('error', fnError('error')); 
    xhr.addEventListener('abort', fnError('abort')); 
    xhr.addEventListener('load', fnOK); 
    xhr.send(); 
} 

基本用法:

goHome(function(err, ip){ 
    if (err){ 
     console.error(err); 
    } else { 
     //do stuff 
     console.log(JSON.stringify(ip)); 
    } 
}); 
+0

「這是一個包含異步響應的函數。」 - 不,它不是。當OP調用'open()'時,將'async'設置爲'false'。 – Quentin

+0

你是對的,我從問題中複製了那部分內容,而沒有對它給予足夠的重視。它應該被xhr的異步版本所取代。現在它已被糾正。 – Loksly