2016-09-29 43 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