我可以声明一个非全局变量来存储异步值吗?

时间:2014-06-18 17:05:47

标签: javascript jquery ajax scope

我有多个JavaScript文件。 我有一个JS函数,它在包含多个AJAX调用的加载时运行。 每个AJAX调用都执行回调(以及递增同步计数器):: myArray.push('somevalue');

这样我就可以验证所有AJAX调用(对于这个JS文件)何时完成。

有没有一种方法可以避免将myArray声明为全局变量,同时允许异步回调推入此数组?

2 个答案:

答案 0 :(得分:0)

如果要在完成一定数量的AJAX请求后执行某些代码,请使用$.when

如果您仅使用myArray知道请求何时完成,则可以将其删除。如果您使用它来存储每个请求的结果,则可以将其保留在与请求相同的范围内,然后在done处理程序中访问它。试试这个:

var myArray = [];

var ajax1 = $.ajax({
    url: '/foo/',
    success: function(data) {
        myArray.push(data);
    });
});

var ajax2 = $.ajax({
    url: '/bar/',
    success: function(data) {
        myArray.push(data);
    });
});

$.when(ajax1, ajax2).done(function() {
    // both requests complete
    // myArray will contain the data of both requests at this point...
    for (var i = 0; i < myArray.length; i++) {
        console.log(myArray[i]);
    }
});

答案 1 :(得分:0)

声明一个只能在你想要的范围内访问的变量(例如,在函数内部)。

类似的东西:

var ajaxCalls = function() {
    var myArray = [];

    var ajax1 = $.ajax({
        url: 'foo.com',
        success: function(data) {
            myArray.push(data);
        });
    });

    // do more AJAX stuff

    $.when(ajax1, ..., ).done(function() {
        // make sure all requests are complete
        // do stuff with the completed array
    });
};

由于JavaScript具有功能范围,因此myArray变量不是全局变量,但可以在ajax回调中访问。希望有所帮助!