0

我知道还有很多其他类似的问题,但我还不能将对象(电子表格)中的数据写入 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);
4

2 回答 2

1

老实说,我不知道您的脚本使用双 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包含您的数据,而不是 field data。这样做是有目的的,以免妨碍对dataTypeurl(非常常见)之类的参数的访问。用。。。来代替:

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

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

PHP

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

我认为您尝试做的是将请求正文传递给您的代码,此时您不会$_POST使用输入处理程序(fopen(php://input)来捕获它

于 2013-10-15T10:58:00.523 回答
0

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

于 2014-03-14T15:29:30.323 回答