2016-09-29 21 views
0
var InfoURL 

$.get("https://ipinfo.io", function(response) { 
    if(response.ip.indexOf(':') > -1) { 
     InfoURL = 'google.com'; 
    } else { 
     InfoURL = 'google.ch'; 
    } 
    alert(InfoURL); 
}, "jsonp"); 

alert (InfoURL); 

なぜ2番目のalertは空の変数ですか?変数がグローバルになるように変更する必要があるのは何ですか?関数内にグローバル変数が設定されていません

+1

ajaxリクエストは非同期です。 2番目の警告は 'get'が終了する前に実際に実行されます。 – avrahamcool

+0

第2の「警告」とは、まず最初のことですか? – a0viedo

答えて

0

$.get関数は非同期であるため、これは、あなたがいずれかの使用を約束する必要があり、または、このようなコールバックを取る独自の関数に関数をラップ:

function myGet(callback) { 
    $.get("https://ipinfo.io", function(response) { 
     if(response.ip.indexOf(':') > -1){ 
      callback('google.com'); 
     } else { 
      callback ('google.ch'); 
     } 
    }, "jsonp") 
} 

使用法:

myGet(function(data) { 
    alert(data); 
}); 
+0

だから私はそれを同期させたいのですか? – mazleu

+2

@mazleu - あなたは同期したくありません。これはメインスレッドをブロックし、ブラウザはユーザにスクリプトを強制終了するオプションを提供するかもしれません。アラートが応答処理の一部として表示されるように調整します。 –

+0

あなたの例は動作しません。それはURLが定義されていないと言います。 – mazleu

関連する問題