jquery ajax循环只返回最后一个值

jquery ajax循环只返回最后一个值,jquery,ajax,Jquery,Ajax,我对几个不同的服务进行了ajax调用。我知道每次连续调用都会覆盖我的数组var log,但我不知道如何更改逻辑以附加下一个数组而不是覆盖 $.ajax($.extend({}, ajaxDefaults, source, { data: data, success: function(events) { events = events || []; va

我对几个不同的服务进行了ajax调用。我知道每次连续调用都会覆盖我的数组
var log
,但我不知道如何更改逻辑以附加下一个数组而不是覆盖

$.ajax($.extend({}, ajaxDefaults, source, {
                data: data,
                success: function(events) {
                    events = events || [];
                    var res = applyAll(success, this, arguments);
                    if ($.isArray(res)) {
                        events = res;
                    }
                    callback(events);


                  var log = log || [];
                      for (var i=0; i<events.length; i++) {
                        log.push(events[i]);
                    }
                    console.log(log);

                },
                error: function() {
                    applyAll(error, this, arguments);
                    callback();
                },
                complete: function(events) {
                    applyAll(complete, this, arguments);
                    popLoading();

                }
            }));
$.ajax($.extend({}),ajaxDefaults,source{
数据:数据,
成功:功能(事件){
事件=事件| |[];
var res=applyAll(成功、此、参数);
如果($.isArray(res)){
事件=res;
}
回调(事件);
var log=log | |[];

对于(var i=0;i这只是一个范围问题。您正在$.ajax success()函数内重新声明“var log”(并因此覆盖它)。在$.ajax之外声明var log,然后将新结果推送到该数组中

请尝试以下操作:

var log = [];
$.ajax($.extend({}, ajaxDefaults, source, {
    data: data,
    success: function(events) {
        events = events || [];
        var res = applyAll(success, this, arguments);
        if ($.isArray(res)) {
            events = res;
        }
        callback(events);

        for (var i=0; i<events.length; i++) {
            log.push(events[i]);
        }
        console.log(log);

    },
    error: function() {
        applyAll(error, this, arguments);
        callback();
    },
    complete: function(events) {
        applyAll(complete, this, arguments);
        popLoading();

    }
}));
var log=[];
$.ajax($.extend({},ajaxDefaults,source{
数据:数据,
成功:功能(事件){
事件=事件| |[];
var res=applyAll(成功、此、参数);
如果($.isArray(res)){
事件=res;
}
回调(事件);

对于(var i=0;i这只是一个范围问题。您正在$.ajax success()函数内重新声明“var log”(并因此覆盖它)。在$.ajax之外声明var log,然后将新结果推送到该数组中

请尝试以下操作:

var log = [];
$.ajax($.extend({}, ajaxDefaults, source, {
    data: data,
    success: function(events) {
        events = events || [];
        var res = applyAll(success, this, arguments);
        if ($.isArray(res)) {
            events = res;
        }
        callback(events);

        for (var i=0; i<events.length; i++) {
            log.push(events[i]);
        }
        console.log(log);

    },
    error: function() {
        applyAll(error, this, arguments);
        callback();
    },
    complete: function(events) {
        applyAll(complete, this, arguments);
        popLoading();

    }
}));
var log=[];
$.ajax($.extend({},ajaxDefaults,source{
数据:数据,
成功:功能(事件){
事件=事件| |[];
var res=applyAll(成功、此、参数);
如果($.isArray(res)){
事件=res;
}
回调(事件);

对于(var i=0;iyes)来说,var log=log | |【】每次都会创建一个新对象谢谢!这是有道理的。我认为var log=log | |【】会在日志未定义的情况下创建一个新日志。使用全局变量会起作用:log=log | |【】;只有当您用“var log”重新声明变量时,您才会覆盖它。是的,var log=log |【】;每次都会创建一个新对象谢谢!这很有意义。我想如果日志未定义,var log=log | |【】会创建一个新日志。使用全局变量会起作用:log=log | |【】;只有当您用“var log”重新声明变量时,您才会覆盖它。