Javascript变量不保留值

时间:2013-01-17 14:57:01

标签: javascript jquery ajax

  

可能重复:
  How to return the response from an AJAX call from a function?

我有一个函数可以在线读取文件中的数值数据。虽然文件被正确检索(由警报显示的值证明),但当我尝试将其设置为输出然后返回输出时,我得到一个未定义的结果。

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

function readFileFromWeb() {
    var output;

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

    return output;
}

2 个答案:

答案 0 :(得分: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函数时,您需要使用相同的回调模式。

答案 1 :(得分: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;
}