2016-10-10 4 views
0

こんにちは、これは私の最初の質問です。私はJSにとって本当に新しく、Web訪問者のIPアドレスを取得して彼に表示するには純粋なJSの方法が必要です。どのように私はGETを使用してそれを行うことができ、誰かがなぜ私のコードは動作しません知っていますか?GETメソッドを使用してPure JSでユーザーのIPアドレスを取得する方法はありますか

私の目標は、コンストラクタ関数は、あなたがnew演算子でそれを呼び出す必要がありますされ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から情報を取得することです。

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

関連する問題