javascript - 谷歌图表错误: every row given must be either null or an array

标签 javascript arrays google-visualization

我已经设置了一个 Google 图表(组织图表)实现,它接受行列表作为变量,最终来自 PHP。如果我尝试使用该变量渲染组织结构图,则会收到错误“给定的每一行必须为空或数组”。如果我在 addRows 命令之前 alert(userlist),复制该输出,并将变量替换为输出,那么一切都很好,所以我知道它正在接收数据适本地。这是我到目前为止所得到的:

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

function drawChart() {
  var data = new google.visualization.DataTable();
  data.addColumn('string', 'Name');
  data.addColumn('string', 'Manager');
  data.addColumn('string', 'ToolTip');

  // Pull user information from Drupal
  var userlist = Drupal.settings.orgchart.userlist;

  // For each orgchart box, provide the name, manager, and tooltip to show.
  alert(userlist);
  data.addRows([userlist]);

  // Create the chart.
  var chart = new google.visualization.OrgChart(document.getElementById('org-chart'));
  // Draw the chart, setting the allowHtml option to true for the tooltips.
  chart.draw(data, {allowHtml:true});
}

同样,如果我将 data.addRows([userlist]); 中的 userlist 替换为 alert(userlist) 的输出,效果会很好。

更新:这是原始输出:
[{v:'CN=我的姓名,OU=IT,OU=Fesslers,DC=hpsi,DC=local', f:'我的姓名'}, 'CN=主管姓名,OU=Sr. Management,OU=Fesslers,DC=hpsi,DC=local', ''], [{v:'', f:'另一个名称'}, '', ''], [{v:'CN=又一个,OU=IT,OU=Fesslers,DC=hpsi,DC=local', f:'又一个'}, 'CN=我的名字,OU=IT,OU=Fesslers,DC=hpsi,DC=local', ' ']

更新:添加创建我的用户列表变量的 PHP:

$allusers = entity_load('user');
$userlist = '';
if ($allusers) {
  foreach ($allusers as $useritem) {
    $dn = '';
    $manager = '';
    $fullname = '';
    if ($useritem->uid > 1) { // Skip user 0 and 1
      if (isset($useritem->field_distinguished_name['und']['0']['value'])) {
        $dn = $useritem->field_distinguished_name['und']['0']['value'];
      }
      if (isset($useritem->field_manager_dn['und']['0']['value'])) {
        $manager = $useritem->field_manager_dn['und']['0']['value'];
      }
      if (isset($useritem->field_full_name['und']['0']['value'])) {
        $fullname = $useritem->field_full_name['und']['0']['value'];
      }
      ($userlist == '') ? $userlist = '[[{v:\'' . $dn . '\', f:\'' . $fullname . '\'}, \'' . $manager . '\', \'\']' : $userlist .= ', [{v:\'' . $dn . '\', f:\'' . $fullname . '\'}, \'' . $manager . '\', \'\']';
    }
  }
  if ($userlist != '') {
    $userlist .= ']';
  }
}

最佳答案

您有几个问题:

  • userlist 的值是一个字符串,而不是一个对象。当你尝试的时候 到 addRows([userlist]) 您正在发送一个具有单个 元素,一个字符串。
  • 当尝试将您收到的对象从字符串转换为 javascript,JSON.parse 不起作用,因为属性名称是 不在引号中({f:'My name'} 应为 {"f":"My name"})
  • 当然,它可以与 userlist=eval('['+userlist+']') 配合使用,但使用 eval 在你的Javascript中是not always the best idea .
  • 您将 Name 声明为字符串,但您正在发送 目的。那是怎么回事?如果你不发送对象,你也摆脱了 Javascript/JSON 解析的情况

最后,我不确定为什么你的值需要额外的方括号。从我看到的 PHP 代码来看,它应该已经包含数组数组的括号。

结论:更改返回值的格式,使其成为有效的JSON,并用JSON.parse(value)读取。 。我不是 Drupal 用户,但我找到了有关如何将复杂的 PHP 变量传递给 Javascript 的答案:https://drupal.stackexchange.com/questions/21566/how-to-pass-php-variables-to-javascript-jquery

这是一个工作的(?)jsfiddle:https://jsfiddle.net/pxjhffj9/将 eval 与您最初提供的字符串一起使用。

这是一个有效的 JSON:

[
    [{
            "v" : "CN=My Name,OU=IT,OU=Fesslers,DC=hpsi,DC=local",
            "f" : "My Name"
        }, "CN=Supervisor Name,OU=Sr. Management,OU=Fesslers,DC=hpsi,DC=local", ""],
    [{
            "v" : "",
            "f" : "Another Name"
        }, "", ""],
    [{
            "v" : "CN=Yet Another,OU=IT,OU=Fesslers,DC=hpsi,DC=local",
            "f" : "Yet Another"
        }, "CN=My Name,OU=IT,OU=Fesslers,DC=hpsi,DC=local", ""]
]

关于javascript - 谷歌图表错误: every row given must be either null or an array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36319846/

相关文章:

javascript - AJAX页面下载进度

javascript - c3JS加载函数

javascript - 使用 Sequelize 将值发布到 MySQL 的后端问题

Java:带有char数组的println给出乱码

arrays - 无法显示数组中的目录内容

javascript - 如何将我的数据传递到 google 图表 api?

javascript - 将谷歌表格加载到仪表板中的谷歌图表

javascript - 在javascript中如何将字符串转换为数组并将数组转换为字符串

javascript - 谷歌折线图中的 svg> 和 <rect> 内联样式错误

arrays - $in 在环回中不起作用