0

我想将我的返回数据推送到 d1 数组中,但除非我之前发出警报消息,否则它不会发生d1.push...。我尝试将d1.push...代码放在底部arr=data.split(",");,但它也不起作用。我应该怎么做才能将我的 ajax 数据放在图表中而不显示警报框!!!????

$(function () {
    var d1=[],previousPoint,arr=[];     

    $.get("../ajax/getcount.php",  function(data){
        arr=data.split(",");
    });

    alert("");// if I dont put this, my chart will be empty

    d1.push([0,arr[0]]);
    d1.push([1,arr[1]]);
    d1.push([2,arr[2]]);
    d1.push([3,arr[3]]);
    d1.push([4,arr[4]]);
    d1.push([5,arr[5]]);
    d1.push([6,arr[6]]);
    d1.push([7,arr[7]]);
    d1.push([8,arr[8]]);
    d1.push([9,arr[9]]);
    d1.push([10,arr[10]]);

 var ds = new Array();
 ds.push({data:d1,bars:{show:true,barWidth:0.8,order:1,}});
.
.
.
4

3 回答 3

3

$.get is performing an asynchronous action, but you are trying to use it synchronously. You need to put those array pushes inside of the $.get callback. Example:

$(function () {
    var d1=[],previousPoint,arr=[];     

    $.get("../ajax/getcount.php",  function(data){
        arr=data.split(",");
        d1.push([0,arr[0]]);
        d1.push([1,arr[1]]);
        d1.push([2,arr[2]]);
        d1.push([3,arr[3]]);
        d1.push([4,arr[4]]);
        d1.push([5,arr[5]]);
        d1.push([6,arr[6]]);
        d1.push([7,arr[7]]);
        d1.push([8,arr[8]]);
        d1.push([9,arr[9]]);
        d1.push([10,arr[10]]);

    });
于 2012-05-04T07:19:12.507 回答
0

制作一个单独的函数来绘制你的图表。可以说它的名字是DrawChart(data)调用成功处理程序中的函数,$.get()也可以在同一个处理程序中解析你的数据。$(function () { var d1=[],previousPoint,arr=[];

$.get("../ajax/getcount.php",  function(data){
    arr=data.split(",");
    d1.push([0,arr[0]]);
    d1.push([1,arr[1]]);
    d1.push([2,arr[2]]);
    d1.push([3,arr[3]]);
    d1.push([4,arr[4]]);
    d1.push([5,arr[5]]);
    d1.push([6,arr[6]]);
    d1.push([7,arr[7]]);
    d1.push([8,arr[8]]);
    d1.push([9,arr[9]]);
    d1.push([10,arr[10]]);
    DrawChart(d1);
})


您的代码的问题是 $.get() 是异步的,因此在警报后它会填充数据并填充图表。jacks ans 的问题是,尽管 hez 在成功处理程序中填充数据,但绘制图表的代码仍然是从成功处理程序之外的某个地方调用的。

于 2012-05-04T07:25:58.180 回答
0

或者,您可以在 jquery ajax 函数中使用 async:false .. 所以您只需替换现有代码

 $.get("../ajax/getcount.php",  function(data){
        arr=data.split(",");
    })

对此

        var arr = $.ajax("../ajax/getcount.php",{async:false,type:"GET"}).responseText.split(',');
d1.push([0,arr[0]]);
    d1.push([1,arr[1]]);
    d1.push([2,arr[2]]);
    d1.push([3,arr[3]]);
    d1.push([4,arr[4]]);
    d1.push([5,arr[5]]);
    d1.push([6,arr[6]]);
    d1.push([7,arr[7]]);
    d1.push([8,arr[8]]);
    d1.push([9,arr[9]]);
    d1.push([10,arr[10]]);

 var ds = new Array();
 ds.push({data:d1,bars:{show:true,barWidth:0.8,order:1,}});

并按原样使用所有现有代码注意:-不建议使用此方法,因为这将停止您的 ui,直到 AJAX GET 请求的响应

于 2012-05-04T07:34:27.787 回答