我想使用服务器端存在的数组在Javascript中创建一个Handsontable。该数组有一列:
$table[] = "a";
$table[] = "b";
要将其加载到Handsontable中,需要将其转换为:
var input = [["a"],["b"]];
$("#myTable").handsontable({
data: input,
startRows: 1,
startCols: 1
};
在PHP中,我首先使用JSON对其进行编码:
<?php echo json_encode($table); ?>
然后 getJSON 或其他 ajax 函数以这种格式在客户端获取它,但我找不到正确的方法。希望有人能帮忙。
要发布它,我已经尝试过1) 使用隐藏字段发布
<input type="hidden" name="input_field" value=<?php echo json_encode($table); ?> >
并通过以下方式进入 Ajax 部分:
var input = $('#input_field').val();
alert(input);
但警报返回:未定义,并且数组 {a,b} 未加载到Handsontable中。2)或者我正在尝试使用$.getJSON。在 PHP 中:
$table = array();
$table[] = array("a");
$table[] = array("b");
echo json_encode($table);
在阿贾克斯:
jQuery.getJSON('mypage.php',function(table){
alert(!);
});
警报没有触发,我认为 Ajax 代码有一个错误,因为没有显示 Handsontable。谢谢。
在服务器端,您可以创建一个数组数组
$table[] = array("a");
$table[] = array("b");
echo 'var input = ' . json_encode($table) . ";'n";
这将给
var input = [["a"],["b"]];
不需要隐藏字段或$.getJSON()
,因为这已经是一个javascript数组,可以馈送到handsontable
。
如果要在客户端执行此操作,请遍历数组并从 JSON 条目构建新数组
var json = ["a", "b"];
var input = Array();
for (var i in json)
input.push([json[i]]);
JSFiddle
问题中的隐藏字段有两个问题,首先是您必须在value="..."
周围加上引号,并在值内转义引号。第二个问题是在jQuery选择器中。 #input_field
寻找一个有id
的元素,但不是name
。为此,必须向隐藏输入添加id="input_field"
。