使用JQuery Ajax更新JQuery Flot

时间:2012-05-04 07:15:37

标签: jquery ajax flot

我想在d1数组中推送我的returing数据,但除非我在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,}});
.
.
.

3 个答案:

答案 0 :(得分:3)

$ .get正在执行异步操作,但您尝试同步使用它。您需要将这些数组推送到$ .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]]);

    });

答案 1 :(得分: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在成功处理程序中填充数据,但仍然会从成功处理程序之外的某些地方调用绘制图表的代码。

答案 2 :(得分: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请求的响应