0

私は HandsOnTable を使用しており、サーバー上の JSON ファイルへの保存を実装しようとしています。

ページは次のようになります。

<div id="example1" class="handsontable"></div>
<button name="save">Guardar</button>

そしてjQuery:

var handsontable = $container.data('handsontable');

$parent.find('button[name=save]').click(function () {
  $.ajax({
    url: "save.json",
    data: {"data": handsontable.getData()}, //returns all cells' data
    dataType: 'json',
    type: 'POST',
    success: function (res) {
      if (res.result === 'ok') {
        $console.text('Data saved!');
      }
      else {
        $console.text('Save error');
      }
    },
    error: function () {
      $console.text('Save error.');
    }
  });
});

上記のすべてのセルのデータを JSON ファイルに書き込むための PHP スクリプトも作成しています。ユーザーが保存ボタンをクリックするたびに呼び出す必要があります。これは今どのように見えるかです:

<?php
if(isset($_POST['save'])){

    $myFile = "testFile.json";
    $fh = fopen($myFile, 'w') or die("can't open file");
    $stringData = "Floppy Jalopy\n";
    fwrite($fh, $stringData);
    fclose($fh);
};

?>

私の質問は、すべてのセルのデータを PHP 変数 $stringData に送信するにはどうすればよいですか?

よろしくお願いします!

4

2 に答える 2

1

私はあなたがしたいことと同じことを持っています。これを Ajax とオートコンプリート機能で実装しました。新しいデータを load.json ファイルに直接入れているので、ロードボタンを押すたびにユーザーが新しいデータを取得します。私のコードは次のようになります...

index.html

<script data-jsfiddle="example">
var $console = $("#example1console");
        var data = [ [] ];
        var autosaveNotification;

            $('#example').handsontable({
              data: data,
              minSpareRows: 1,
              minSpareCols: 1,
              colHeaders: true,
              rowHeaders: true, 
              autoWrapRow: true,
              currentRowClassName: 'currentRow',
              currentColClassName: 'currentCol',              
              contextMenu: { items: {
                                      "row_above": {},
                                      "row_below": {},
                                      "hsep1": "---------",
                                      "col_left": {},
                                      "col_right": {},
                                      "hsep2": "---------",
                                      "remove_row": {},
                                      "remove_col": {}
                                      }
                            },

              afterChange: function (change, source) 
                            {
                                if (source === 'loadData') {
                                  return; //don't save this change
                                }
                                if ($('input[name=autosave]').is(':checked')) 
                                {
                                  clearTimeout(autosaveNotification);

                                    $.ajax({
                                    url: "saveData.php",
                                    dataType: "json",
                                    type: "POST",
                                    data: {"data": handsontable.getData()}, //returns all cells' data
                                    complete: function (data) {
                                          $console.text('Autosaved (' + change.length + ' cell' + (change.length > 1 ? 's' : '') + ')');
                                          autosaveNotification = setTimeout(function () {
                                            $console.text('Changes will be autosaved');
                                          }, 1000);
                                        }
                                  });
                                }
                           }
            });     
        </script>

saveData.php

<?php 

$file = 'json\load.json'; 

file_put_contents($file, ""); // Erase file content because we need to use this content for loading.

    foreach ($_POST['data'] as $change) 
    {       
        file_put_contents($file, json_encode($change) . ",", FILE_APPEND | LOCK_EX);
    }

// remove last comma from data...
$fileHandle = fopen($file, 'r+') or die("can't open file");
$stat = fstat($fileHandle);
ftruncate($fileHandle, $stat['size']-1);
fclose($fileHandle);


// Append rest of syntax to file content so when press load next time we got ready new data...
$current = file_get_contents($file);
$newData = "{ \"data\": [ " . $current . " ] }"; 
file_put_contents($file, $newData);

// success json response...
$out = array('result' => 'ok');
echo json_encode($out); 

?>

これがあなたを助けることを願っています...

于 2013-08-28T12:21:59.837 に答える
0
  1. 「url: "save.json",」は ajax では意味がありません。URL は、投稿されたデータが PHP で処理される場所である必要があります。
  2. data: {"data": handsontable.getData()}, (handsontable.getData() の形式についてはわかりません)...投稿する前に、json 形式の文字列にする必要がある場合があります。
  3. PHPコードでは、「$stringData = $_POST["data"];」を試してください または、json_encode を使用して、ファイルに保存する前に json 形式の文字列を作成してみてください。
于 2013-08-09T13:24:15.557 に答える