2016-05-19 5 views
0

HighChartsを参照して配列にJSONエントリを設定しようとしています。Jquery POSTに配列が設定されていません

JSONオブジェクトの1つに手動で入力され、PHPポストで動的に入力する必要があります。 データを配列にプッシュするためにコールバック関数を使用しようとしましたが、データがプッシュされないようです。

私は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 
+0

問題は、内部に「完了」機能があり、オブジェクトにデータが入力されていることです。しかし、その機能を残すと、すべての変更が消えて空になりますか? – user4035

+0

問題はjavascriptが非同期なので、投稿を送信した後に配列にアクセスしようとしたときに本当に嫌なことは、あなたのログステートメントの後に投稿が実行されていることです。空のdata_arrayを取得する理由 – MoniXx

+0

ソリューションはコードを書くことですdoneコールバックの中で、実際にあなたの投稿から返された値を使用することができます。 – MoniXx

答えて

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, 

}); 
があなたのロジックを移動

、あなたが機能であなたのロジックを入れて、あなたの行ってコールバックの内側に、その関数を呼び出すよりも、カント場合:

は、ここに私のコードです。

+0

ありがとうMonix。私はいくつかのテストの後、同じ結論に達しました。 .done関数の内部にロジックを移動すると機能します。 – luskbo

関連する問題