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

时间:2013-10-15 10:47:44

标签: 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.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);

2 个答案:

答案 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。这样做是为了不妨碍对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

答案 1 :(得分:1)

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