将JSON从jQuery发送到PHP以编辑文本文件

时间:2014-06-06 18:03:35

标签: php jquery ajax json

我要做的是以下内容: 我想从我的jQuery代码发送一个JSON对象到我服务器上的PHP文件。 我希望PHP文件将此JSON对象附加到我的文本文件中。

问题:

我正在使用PHP文件。我正在发送数据,我需要PHP将数据保存在变量中,以便我可以将其写入文本文件。问题是它没有那样做。我发布的帖子显然没有内容(它只显示array())。

我的jQuery代码:

var username = "";
var password = "";
var url = window.location.href;
var title = document.title;
var detailsArray = {title : [{
                    "title" : title,
                    "url" : url, 
                    "username" : username, 
                    "password" : password
                    }]
                    };

$(document).keydown(function(e) {
    if(e.which == 17) {
        console.log(detailsArray);
        $.ajax({
          type: "POST",
          url: "http://......./Server.php",
          data: detailsArray,
          success: function(data) {
              console.log("Data sent!"+data);
          }
        });
    }
});

我的PHP代码:

$dataToBeInserted = $_POST;
$file = "JSON.json";

//Open the file with read/write permission or show text
$fh = fopen($file, 'a+') or die("can't open file");
$stat = fstat($fh);

//Remove the last 2 characters from the JSON file
ftruncate($fh, $stat['size']-2);

//Add the data from $dataToBeInserted to the file
echo fwrite($file, $dataToBeInserted );

//Close the file
fclose($fh);

这个PHP文件会出现一些警告/错误:

Array ( )

Warning: fwrite() expects parameter 1 to be resource, string given in Server.php on line 17

Warning: fwrite() expects parameter 1 to be resource, string given in Server.php on line 19

我在这里做错了什么?我不习惯PHP,因此可能存在一堆错误,但我认为jQuery方面没问题。

1 个答案:

答案 0 :(得分:1)

首先你的fwrite($ file)应该是fwrite($ fh)..你必须写入fopen返回的文件句柄...而不是文件的字符串名称。

$dataToBeInserted = $_POST;
$file = "JSON.json";

//Open the file with read/write permission or show text
$fh = fopen($file, 'a+') or die("can't open file");
$stat = fstat($fh);

//Remove the last 2 characters from the JSON file
ftruncate($fh, $stat['size']-2);

//Add the data from $dataToBeInserted to the file
echo fwrite($fh, $dataToBeInserted );

//Close the file
fclose($fh);

但是你的JSON文件不完整/已损坏。因为你删除了2个字符,但从未添加过它们。

老实说,解决这个问题的简单方法就是

$data = json_decode(file_get_contents('JSON.json'));
if (!$data) $data = array();
array_push($data, $_POST);
file_put_contents('JSON.json', json_encode($data);

但是,这会得到非常昂贵的IO /资源

其他方法....见评论

$dataToBeInserted = $_POST;
$file = "JSON.json";

//Open the file with read/write permission or show text
$fh = fopen($file, 'a+') or die("can't open file");
$stat = fstat($fh);

//Remove the last 2 characters from the JSON file
//ftruncate($fh, $stat['size']-2);

//Add the data from $dataToBeInserted to the file with a comma before it if there is data in file already.
if ($stat['size'] != 0) $append = ",";
echo fwrite($fh, $append . json_encode($dataToBeInserted) );

//Close the file
fclose($fh);

现在阅读它..

$data = file_get_contents('JSON.json');
$dataArray = json_decode('[' . $data  . ']');

所以现在每次我们写入文件时都会输入一个逗号,然后当我们读取它时,我们将它包装在括号中,这样它就是我们一直在做的写入数组。

虽然这不会像资源密集型一样,但它会被明智地阅读......但那是因为你想要一个文件中的所有内容。