jquery ajax - 第二个数组推送不起作用

时间:2014-08-28 07:23:20

标签: javascript jquery arrays ajax

我有这个代码需要填充将在某些图表工具上使用的数组。所以有一个显示结果的按钮和一个复选框,使用户可以向数组添加另一组行。我使用.push()作为数组,它的工作原理。现在,问题是第二次推送我的第二次ajax调用没有将数据添加到数组中。这是我的代码:

$.ajax({
    type: "POST",
    url: "Default.aspx/GetSubCategorySalesPerTerritory",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (response) {        
        $.each(response.d, function (i, val) {            
            var values = new Array(val.From, val.To, val.Thickness);            
            rows.push(values); //this one works
        });        

        if ($('#chkPromotion').is(":checked")) {            
            $.ajax({
                type: "POST",
                url: "Default.aspx/AddPromotion",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {                    
                    $.each(data.d, function (i, val) {                        
                        var values = new Array(val.From, val.To, val.Thickness);                        
                        rows.push(values); //this one fails                        
                        alert("pushed");
                    });                    
                },
                failure: function (data) {
                    alert(data.d);
                }
            });            
            drawChart(rows);
        } else {            
            drawChart(rows);
        }        
    },
    failure: function (response) {
        alert(response.d);
    }
});

我真的不知道它失败的原因。会发生什么是即使满足条件并且第二个ajax调用成功,数组rows的内容仍然是第一个数组推送。问题的代码是什么?

1 个答案:

答案 0 :(得分:0)

由于ajax的异步性质,实际上会得到你得到的结果

您应该在第二个ajax调用的成功回调中调用该方法,如此

$.ajax({
    type: "POST",
    url: "Default.aspx/GetSubCategorySalesPerTerritory",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (response) {        
        $.each(response.d, function (i, val) {            
            var values = new Array(val.From, val.To, val.Thickness);            
            rows.push(values); //this one works
        });        

        if ($('#chkPromotion').is(":checked")) {            
            $.ajax({
                type: "POST",
                url: "Default.aspx/AddPromotion",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {                    
                    $.each(data.d, function (i, val) {                        
                        var values = new Array(val.From, val.To, val.Thickness);                        
                        rows.push(values);
                    }); 
                    drawChart(rows); // here
                },
                failure: function (data) {
                    alert(data.d);
                }
            });            
        } else {            
            drawChart(rows);
        }        
    },
    failure: function (response) {
        alert(response.d);
    }
});