【问题标题】:Echo PHP array to Javascript将 PHP 数组回显到 Javascript
【发布时间】:2015-04-02 19:08:11
【问题描述】:

我目前正在从事一个项目,我需要从数据库中获取数据并将其生成为 Javascript 数组。它可以动态更改图表。

我有以下 PHP 代码来获取数组。

<?php
  ini_set('memory_limit', '1024M');
  $dbconn = pg_connect(**My connection details**)
          or die('Could not connect: ' . pg_last_error());

  $county1 = $_GET['c1'];
  $county2 = $_GET['c2'];
  $county3 = "National";

  $counties = 'SELECT * FROM house_price_data_db.county_median_months where county=$1 or county=$2 or county=$3 order by county';
  $result_counties = pg_query_params($dbconn,$counties,array($county1,$county2,$county3)) or die('Query failed: ' . pg_last_error());
   $county_meds = array();

   while($r = pg_fetch_assoc($result_counties)) {
          $county_meds[] = $r;
      }
   echo("var county_med_month=".json_encode(array_values($county_meds), JSON_NUMERIC_CHECK).";");

   pg_free_result($result_counties);
   pg_close($dbconn);
?>

在运行时确实返回了数组。

E.g
var county_med_month=[
{"county":"Carlow","med_jan_10":165000,"med_feb_10":170000,...,"med_dec_14":null}
{"county":"Dublin","med_jan_10":285000,"med_feb_10":280000,...,"med_dec_14":null},
{"county":"National","med_jan_10":220264.31,"med_feb_10":216500,...,"med_dec_14":null}];

但由于某些原因,当我尝试在 Javascript 代码中使用数组时,它似乎不起作用?

function county_med_chart(){
  county_1=document.getElementById("dd1_c").value;
  county_2=document.getElementById("dd2_c").value;
  var c;
  county_meds(county_1,county_2);
  for(c=0;c<county_med_month.length;c+=1){
    var a=county_med_month.c;
    if(a.county==county_1){
      med_jan_10_1=parseFloat(a.med_jan_10);
       :
      med_sep_14_1=parseFloat(a.med_sep_14);
    }
    else if(a.county==county_2){
      med_jan_10_2=parseFloat(a.med_jan_10);    
       :
      med_sep_14_2=parseFloat(a.med_sep_14);
    }
    else if(a.county=="National"){
      med_jan_10_3=parseFloat(a.med_jan_10);
       :
      med_sep_14_3=parseFloat(a.med_sep_14);
    }
  }

  var e=new google.visualization.arrayToDataTable([
    ["Year",county_1,county_2,"National"],
    ["Jan-10",med_jan_10_1,med_jan_10_2,med_jan_10_3],
    ["Feb-10",med_feb_10_1,med_feb_10_2,med_feb_10_3],
     :
    ["Aug-14",med_aug_14_1,med_aug_14_2,med_aug_14_3],
    ["Sept-14",med_sep_14_1,med_sep_14_2,med_sep_14_3],
  ]);

  var b={
    title:"House Price Index by County:",
    curveType:"function",
    is3D:true,
    legend:"top",
    width:650,
    height:280,
    hAxis: { textPosition: 'none' }};
  var d=new google.visualization.LineChart(document.getElementById("chart_div"));
  d.draw(e,b)
  }

有什么建议吗?

【问题讨论】:

  • 您是否尝试将var a=county_med_month.c; 更改为var a=county_med_month[c];
  • 您是否尝试在通过 PHP 设置您的county_med_month 变量后对其进行控制台记录?这将排除任何 json 解析错误。
  • @Naomi:我已经尝试了这两种形式,但似乎仍然遇到问题。 ToBe:你能否给我链接或提供任何进一步的解释,因为我不太明白你的意思。
  • 你可以为county_med_month 提供一些控制台输出吗?你得到什么错误?我认为您首先不是在 javascript 中创建数组。尝试在你的 javascript var foo = &lt;?php echo json_encode($county_meds ); ?&gt;; 中做这样的事情
  • Em 我尝试检查控制台是否使用 Firebug 从函数运行 PHP 脚本,如果数组长度大于 0,我尝试发出警报,但没有得到任何结果。尝试使用上面创建的数组有什么问题吗? echo("varcounty_med_month=".json_encode(array_values($county_meds), JSON_NUMERIC_CHECK).";");

标签: javascript php arrays json google-visualization


【解决方案1】:

尝试以这种方式捕获您的json 编码数据,

var a=county_med_month[c].county;

了解更多信息。关于json数组和对象访问:JSON

【讨论】:

  • 警报(county_med_month[c].country);
  • 你的意思是使用county_med_month[c].county;当我试图在数组中设置等于 1 个条目/行时,如县、med_jan_10、med_feb_10 等。不仅仅是县的值。
  • 然后像 var a=country_med_month[c] where c=0,1,2,3 ......但如果你想分配整个 json 对象(如你所说的单行)访问或分配单个行的单个键,然后您必须像这样设置 var a=country_med_month[c].country
  • 好的,那我试试。我只是想知道你是指国家还是县,因为这也让我感到困惑?
【解决方案2】:

为什么不尝试在使用代码执行任何复杂逻辑之前对其进行调试?

在回显您的数组后,在您的 javascript 顶部尝试以下操作:

if(county_med_month.length > 0) 
    console.log("The array was created!, the problem was with my JavaScript code!");

顺便说一句,您不能使用点符号访问数组值

var a=county_med_month.c;

应该是红色的

var a=county_med_month[c];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-02
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多