Jquery POST没有填充数组

时间:2016-05-19 17:42:35

标签: javascript php jquery arrays highcharts

我正在尝试使用引用HighCharts的JSON条目填充数组。

其中一个JSON对象是手动填充的,需要使用PHP帖子动态填充一个JSON对象。 我一直在尝试使用回调函数将数据推送到数组,但似乎没有数据被推送。

我能够验证PHP Post发回的数据。 看起来它确实填充了数组,但是一旦Jquery POST函数完成,似乎数组就被清空了。

另外,我在POST中有一个console.table调用。这个实际上正确地打印了数组。

您可以从下面的代码中看到我使用console.table()调用 邮寄后立即,它是空的。 但是在我接下来手动推送之后,数据阵列现在具有用于手动JSON阵列推送的数据。

有什么想法吗?

这是我的代码:

/* INITIAL ARRAY **************************************/
data_array = [];
var colors = Highcharts.getOptions().colors;
categories = ['Dynamic', 'Manual'];

/* FUNCTION TO PUSH TO ARRAY *****************************/
function push_toarray(cats,counts) {

    data_array.push({
        y: 10.38,
        color: colors[1],
        drilldown: {
            name: 'Dynamically Populated',
            categories: [cats],
            data: [counts],
            color: colors[1]
        }
    });       
}

/* PHP AND FOR LOOP FOR GETTING DATA *********************************************/


    $.post( "php/dt_charts.php")
        .done(function( data ) {
        var obj = jQuery.parseJSON(data);

        // To verify the values are returned
        console.log(obj.fe_det_name);  
        console.log(obj.fe_det_count);

        push_toarray(obj.fe_det_name, obj.fe_det_count);
        console.table(data_array);  // This prints the array correctly with both JSON objects inside
    });

    //console.table(data_array);  // This prints no data.

/* MANUAL DATA ARRAY *********************************************/


    data_array.push({
        y: 10.38,
        color: colors[1],
        drilldown: {
            name: 'Manually Populated',
            categories: ['Firefox v31', 'Firefox v32', 'Firefox v33', 'Firefox v35', 'Firefox v36', 'Firefox v37', 'Firefox v38'],
            data: [0.33, 0.15, 0.22, 1.27, 2.76, 2.32, 2.31, 1.02],
            color: colors[1]
        }
    })


console.table(data_array); // This prints only the manually populated array values

1 个答案:

答案 0 :(得分:3)

  $.post( "php/dt_charts.php")
     .done(function( data ) {
    var obj = jQuery.parseJSON(data);

    // To verify the values are returned
    console.log(obj.fe_det_name);  
    console.log(obj.fe_det_count);

    push_toarray(obj.fe_det_name, obj.fe_det_count);
    console.table(data_array);  // This prints the array correctly with both JSON objects inside

<----- move your logic here,

});

将逻辑移到那里,如果你不能把你的逻辑放在一个函数中并在完成的回调中调用该函数。