我已经设置了一个 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/