使用PHP从Ajax请求创建JSON文件
我知道还有很多其他类似的问题,但我还不能将对象(电子表格)中的数据写入JSON文件 这是我的JS:使用PHP从Ajax请求创建JSON文件,php,jquery,ajax,json,Php,Jquery,Ajax,Json,我知道还有很多其他类似的问题,但我还不能将对象(电子表格)中的数据写入JSON文件 这是我的JS: function (){ var spread = $("#ss").wijspread("spread"); var activeSheet = spread.getActiveSheet(); var dados = JSON.stringify(spread.toJSON()); activeSheet.bind($.wijmo.wijspread.Even
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编码的对象表示。如果<代码> tojss<代码>返回一个对象,考虑重命名该函数,因为它是高度含糊的。
我们将以dados
现在在字符串中包含正确的JSON表示为前提
$.ajax({
url: 'script.php',
data: dados,
dataType: "json",
type: "POST"
});
您正在发送到script.php
(这里没有新闻),这是您的第一个问题。ajax
参数是错误的,因为data
包含您的数据,而不是data
字段。这样做的目的是为了不妨碍对参数的访问,如数据类型
或url
(非常常见)。
替换为:
$.ajax({
url: 'script.php',
data: {
data: dados
},
dataType: "json",
type: "POST"
});
请注意,dataType
参数return将强制您从PHP代码返回有效的JSON,否则AJAX调用将失败
PHP
修改后,$\u POST['data']
现在将包含JSON编码的对象文本。对代码的唯一修改是删除json\u encode
。它已经被编码了。你不再需要它了
我认为您试图做的是将请求主体传递给您的代码,在这一点上,您不会使用
$\u POST
捕获它,而是使用输入处理程序(fopen(php://input
)太好了。我遇到了这个“\”问题,我正在努力解决这个问题。谢谢你的评论stripslashes()也为我解决了同样的问题。为什么你要尝试json\u encode()
已经编码的数据?你不应该对输入的数据进行json\u解码吗?我尝试了json\u解码($stringData);同样如此,但结果是一样的:一个空的JSON文件嗨,谢谢,这很有帮助!它现在正在创建文件,尽管其中有很多反斜杠,比如:{\'activeSheetIndex\':0,\'sheetCount\':1,\'tabStripRatio\':0.5,\'tabStripVisible\':true,\'newTabVisible\':true,\'referenceStyle\':0,\'useWijmoTheme\':false\“canUserEditFormula\”:true、\“startSheetIndex\”:0、\“allowUndo\”:true、\@NunoNogueira:禁用魔引号或升级到一个好的PHP版本,或者从输入中只使用stripslashes()。是的,stripslashes()做到了。感谢您的帮助!