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

使用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

我知道还有很多其他类似的问题,但我还不能将对象(电子表格)中的数据写入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编码的对象表示。如果<代码> 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()做到了。感谢您的帮助!