我知道还有很多其他类似的问题,但我还是无法将对象(电子表格)中的数据写入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);
答案 0 :(得分:2)
老实说,我不知道你的脚本使用的双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
。这样做是为了不妨碍对dataType
或url
等参数的访问(这是非常常见的)。
替换为:
$.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
)
答案 1 :(得分:1)
那很好。我有这个“问题”,我正在努力解决这个问题。感谢您的评论,stripslashes()也为我解决了同样的问题。