使用PHP从Ajax请求创建JSON文件

我知道还有很多其他类似的问题,但我还是无法将对象(电子表格)中的数据写入JSON文件。

这是我的JS:

function (){ var spread = $("#ss").wijspread("spread"); var activeSheet = spread.getActiveSheet(); var dados = JSON.stringify(spread.toJSON()); activeSheet.bind($.wijmo.wijspread.Events.EditChange, function (sender, args) { console.log(dados); $.ajax({ url: 'script.php', data: dados, dataType: "json", type: "POST" }); }); } 

只要电子表格发生更改,数据就会发送到控制台,文件在服务器中创建但是为空。

这是script.php

 $myFile = "/file.json"; $fh = fopen($myFile, 'w') or die("impossible to open file"); $stringData = $_POST['data']; $stringData=json_encode($stringData); fwrite($fh, $stringData); fclose($fh); 

老实说,我不知道你的脚本使用的双JSON编码是什么。 我会打破你实际发生的事情:

 var dados = JSON.stringify(spread.toJSON()); 

假设spread.toJSON()返回一个JSON格式的字符串,顾名思义,您将通过这样做最终得到一个双JSON编码的对象表示。 如果toJSON返回一个对象,请考虑重命名该函数,因为它非常模糊。

我们将使用dados现在在字符串中包含正确的JSON表示的前提。

  $.ajax({ url: 'script.php', data: dados, dataType: "json", type: "POST" }); 

你发送到script.php (没有新闻), 就是你的第一个问题.ajax参数错误,因为data包含你的数据,而不是字段data 。 这样做是为了不妨碍对dataTypeurl等参数的访问(这是非常常见的)。 用。。。来代替:

  $.ajax({ url: 'script.php', data: { data: dados }, dataType: "json", type: "POST" }); 

请注意, dataType参数返回将强制您从PHP代码返回有效的JSON,否则AJAX调用将失败。

PHP

完成此修改后, $_POST['data']现在将包含您的JSON编码对象文字。 对代码的唯一修改是删除json_encode 。 它已经编码。 你不再需要了。

我认为你要做的是将一个请求体传递给你的代码,此时你不会用$_POST捕获它但是使用输入处理程序( fopen(php://input ))

那很棒。 我有这个“问题”,我正在努力解决这个问题。 感谢您的评论,stripslashes()也为我解决了同样的问题。