2013-01-17 105 views
0

可能重复:
How to return the response from an AJAX call from a function?JavaScript变量不保留价值

我有一个功能,通过网络从文件中读取数值数据。在正确检索文件时(通过警报显示的值证明),当我尝试将其设置为输出并返回输出时,我得到未定义的结果。

我试图通过范围教程无济于事。我究竟做错了什么?

function readFileFromWeb() { 
    var output; 

    jQuery.get('http://domain.com', function(data) { 
     alert(data); 
     output = data; 
    }); 

    return output; 
} 
+5

欢迎来到**异步**的美妙世界!你不能那样做。 – SLaks

+0

@FelixKling:当我在那个问题下看到你的名字时,我感到很震惊......;/ – georg

+0

2方法来做你想做的事情: 1)让你同步AJAX 2)实现一个基于计时器的功能,等待响应将值分配给您要使用的变量。 – marekful

回答

3

下面是通过回调函数应该如何完成的。

function readFileFromWeb(callback) { 
    jQuery.get('http://domain.com', function(data) { 
     callback && callback(data); 
    }); 
} 

// ... 

readFileFromWeb(function (data) { 
    alert(data); 
}); 

这是因为jQuery.get是一个异步函数,即它在执行时不阻塞,因此立即返回。这就是为什么jQuery.get函数需要一个回调函数的原因,所以一旦AJAX查询返回,它就会触发你的回调函数。

因此,在实现您自己的readFileFromWeb函数时,您将需要使用相同的回调模式。

+0

你能描述一下'callback &&回调(数据)是什么吗?如果它作为参数传递,则回调被执行,不是吗? – kidwon

+1

是的,我使用逻辑运算符中使用的短路机制只调用'回调',如果它包含真值。请注意,如果'callback'不是一个函数,那么这段代码仍然会失败,因为我没有验证它。 –

+0

我明白了,10x分享 – kidwon

1

这是异步的,我评论了你的代码,以帮助你理解事情发生的顺序。

function readFileFromWeb() { 
    //1. create variable. 
    var output; 

    //2. make ajax call. 
    jQuery.get('http://domain.com', function(data) { 
     alert(data); 

     //4. set variable from ajax callback 
     output = data; 
    }); 

    //3. return variable. 
    return output; 
} 
+1

+1用于列出评估订单。 –