JavaScript通过HTML自动解码PHP发送的JSON<;部门>;数据属性?

JavaScript通过HTML自动解码PHP发送的JSON<;部门>;数据属性?,javascript,php,html,Javascript,Php,Html,我正在使用谷歌图表在我正在构建的PHP CMS上构建一些数据库数据的图表。我可以将javascript代码构建到PHP中,但我更愿意将javascript和PHP尽可能分开。这涉及到在PHP中构建chart_数据数组,并在scripts.js文件中使用JQuery发送和获取它。在将数据捕获到scripts.js文件之前,我对数据使用了json_编码;但是,当它到达我的scripts.js文件时。它已经被解析回一个数组。不使用JSON.parse。为什么这是自动发生的;这是个问题吗 my char

我正在使用谷歌图表在我正在构建的PHP CMS上构建一些数据库数据的图表。我可以将javascript代码构建到PHP中,但我更愿意将javascript和PHP尽可能分开。这涉及到在PHP中构建chart_数据数组,并在scripts.js文件中使用JQuery发送和获取它。在将数据捕获到scripts.js文件之前,我对数据使用了json_编码;但是,当它到达我的scripts.js文件时。它已经被解析回一个数组。不使用JSON.parse。为什么这是自动发生的;这是个问题吗

my chart.php文件:

 $chart_data = [];
  $chart_row = [];

  $column_text = ['Data', 'All Posts', 'Active Posts', 'Draft Posts', 'Comments', 'Unapproved Comments', 'Users', 'Subscribers', 'Categories']; 
  $column_count = ['Count', $post_count, $active_post_count, $draft_post_count, $comment_count, $unapproved_comments_count, $user_count, $subscribers_count, $category_count];

  for ($i = 0; $i < count($column_text); $i++) {
    array_push( $chart_row, $column_text[$i], $column_count[$i] );
    array_push( $chart_data, $chart_row ); 
    $chart_row = [];
  }

  $chart_data_json = json_encode($chart_data);

  echo "<div id='chart_data' data-chart-data='{$chart_data_json}'></div>";
使用此代码,一切都正常运行。如果没有JSON.parse,这是jQuery方法的一个特性:

每次尝试都会将属性的字符串值转换为JavaScript值(包括布尔值、数字、对象、数组和null)。只有在不改变其表示形式的情况下,字符串才会转换为数字(例如,字符串“100”转换为数字100,但“1E02”和“100.000”保留为字符串,因为它们的数值100序列化为“100”)。当字符串以“{”或“[”开头时,将使用
jQuery.parseJSON
对其进行解析;它必须后跟带引号的属性名。不能作为JavaScript值进行解析的字符串不会被转换

请注意1E02和100.00等基本值的例外情况:它们实际上是有效的JSON,但不会被解析并保留为字符串。但是,该方法会将“false”、“true”和“null”转换为JSON解析值

在生成诸如HTML输出之类的属性内容时,还有一点需要注意:符号和小于符号应作为HTML实体写入。

这是jQuery方法的一个功能:

每次尝试都会将属性的字符串值转换为JavaScript值(包括布尔值、数字、对象、数组和null)。只有在不改变其表示形式的情况下,字符串才会转换为数字(例如,字符串“100”转换为数字100,但“1E02”和“100.000”保留为字符串,因为它们的数字值100序列化为“100”)。当字符串以“{”或“[”开头时,则使用
jQuery.parseJSON
对其进行解析;它后面必须包含带引号的属性名。不能作为JavaScript值解析的字符串不会被转换

请注意1E02和100.00等基本值的例外情况:它们实际上是有效的JSON,但不会被解析并保留为字符串。但是,该方法会将“false”、“true”和“null”转换为JSON解析值


在生成诸如HTML输出之类的属性内容时,还有一点需要注意:应将符号和小于符号写为HTML实体。

它可能只是自动调用解析,因为您无论如何都要这样做。我看不出您在哪里提取服务器数据,但jQuery会自动为您解析JSON,除非是y您显式地传递一个参数,告诉它不要。如果数据属性包含有效的json,那么它将被转换-这对您来说是一个奖励,而不是一个问题。如果您想要获得普通值或您的属性,那么可以将其用作
$(“#图表"数据”).attr('data-chart-data'))
。它可能只是自动调用解析,因为您无论如何都要这样做。我看不出您在哪里提取服务器数据,但是jQuery将自动为您解析JSON,除非您显式地传递一个参数告诉它不要。如果数据属性包含有效的JSON,那么它将被转换-这对您来说是一个奖励,不是吗这是一个问题。如果要获取普通值或属性,可以使用as
$(“#chart_data”).attr('data-chart-data')
$(document).ready(function(){

  // GOOGLE CHART FUNCTIONALITY 
  var chartData = $('#chart_data').data('chart-data');

  google.charts.load('current', {'packages':['bar']});
  google.charts.setOnLoadCallback(drawChart);

  function drawChart() {
    var data = google.visualization.arrayToDataTable(chartData);

    var options = {
      axisTitlesPosition: 'none',
      chart: {
        title: '',
        subtitle: '',
      }
    };

    var chart = new google.charts.Bar(document.getElementById('columnchart_material'));

    chart.draw(data, google.charts.Bar.convertOptions(options));
  }
});