【问题标题】:jquery ajax - second array push not working [duplicate]jquery ajax - 第二个数组推送不起作用[重复]
【发布时间】:2014-08-28 07:23:20
【问题描述】:

我有这段代码需要填充一个将在某些图表工具上使用的数组。所以有一个按钮将显示结果和一个复选框,使用户能够将另一组行添加到数组中。我使用.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的内容仍然是第一次数组push。代码有什么问题?

【问题讨论】:

  • 打开开发者工具并查看netowrk部分的响应。从中您可以确保调用后端并获取正确的数据。这可能是缓存问题。将缓存:false,添加到 ajax 请求并检查。
  • 我认为调用成功了。我尝试将响应的串联值放在警报框上并显示出来。我也尝试将它放在另一个数组中,但仍然没有成功。
  • 这是你所期望的输出jsfiddle.net/e8Nj3/25
  • 是的,这就是我一直期待的结果。
  • 当你没有向服务器发送任何数据时,为什么会有一个 POST 请求和contentType: "application/json; charset=utf-8"

标签: javascript jquery arrays ajax


【解决方案1】:

由于 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);
    }
});

【讨论】:

  • 这实际上回答了我的问题。谢谢你!但我不明白 ajax 的这种“异步性质”。
  • @DustineTheGreat 希望这能让您了解 ajax 的异步性质stackoverflow.com/questions/14220321/…
猜你喜欢
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多