日期:2014-05-16  浏览次数:20387 次

AJAX获取数据后,成功方法里的返回数据如何声明成全局变量

var token = '';
$.ajax({
        url : 'getToken.php',
        data : {userId : params.userId, type : params.type},
        dataType : "json",
        type : "POST",
    }).done(function(data) {
ret = $.parseJSON(data);
token  = ret.data.token;
alert(token);   // 这个有数据
    });
   alert(token);    // 这个是空, 而我需要的就是在外面操作这个数据


在上面用window.token也是过了, 不行.  求指点.
------解决方案--------------------
你alert的时候ajax还不一定返回数据了呢  
用window.setInterval定时的去检测这个数据有没有  有的话alert
或者放在ajax的回调里
------解决方案--------------------
你这里写的ajax是异步请求,即javascript是非阻塞运行的,在$.ajax还没运行完alert命名可能就执行了,当然这二个时候是没有数据的
把你的ajax设置为同步请求就可以了,设置$.ajax的async属性为false就可以了

------解决方案--------------------
可以使用楼上说的阻塞方式,
但是回调函数应该更加适合使用,也更合理。

[code=javascript]var token = '';
var callback = function(){
    alert(token);
}
$.ajax({
        url : 'getToken.php',
        data : {userId : params.userId, type : params.type},
        dataType : "json",
        type : "POST",
    }).done(function(data) {
        ret = $.parseJSON(data);
        token  = ret.data.token;
        alert(token);   // 这个有数据
        callback();//调用回调函数。
    });