2016-09-29 62 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); 

那麼爲什麼第二個alert是一個空變量?我必須改變什麼,以便變量是全局的?全局變量設置功能不起作用

+1

ajax請求是異步的。第二次提醒實際上在get結束前運行。 – avrahamcool

+0

第二個'alert'你的意思是第一個,對吧? – 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