1

サーバー側に存在する配列を使用して Javascript で Handsontable を作成したいと思います。配列には 1 つの列があります。

$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(!);
});

アラートはトリガーされず、Handsontable が表示されないため、Ajax コードにエラーがあると思います。ありがとう。

4

1 に答える 1

1

サーバー側では、配列の配列を作成できます

$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

質問の非表示フィールドには 2 つの問題があります。1 つ目はvalue="..."、引用符を囲み、値内の引用符をエスケープする必要があることです。2 番目の問題は、jQuery セレクターにあります。を含むが、を含まない#input_field要素を探します。これが機能するには、非表示の入力に追加する必要があります。idnameid="input_field"

于 2013-02-01T10:40:09.490 に答える