【问题标题】:PHP write JSON file via AJAXPHP 通过 AJAX 写入 JSON 文件
【发布时间】:2016-01-07 13:49:27
【问题描述】:

我想通过 jQuery/Ajax 将一些数据发布到 JSON 文件中,但我没有将数据作为 JSON 对象接收。

我的 JSON 内容如下所示:

foo=abc&bar=def

但我想要这个:

{ “富”:“ABC”, “酒吧”:“定义 }

HTML

<form id="foobar">
    <label for="bar">A bar</label>
    <input id="foo" name="foo" type="text" value="" />
    <input id="bar" name="bar" type="text" value="" />
    <input type="submit" value="Send" />
</form>

JS

        var request;

        $("#foobar").submit(function(event){

        if (request) {
            request.abort();
        }
        var $form = $(this);
        var serializedData = $form.serialize();

        request = $.post("dataSaveAjax.php", {json : JSON.stringify(serializedData)});

        event.preventDefault();
    });

PHP

<?php
$file = fopen("dataAjax.json","w+");

$json = $_POST['json'];

$jsonDecode = json_decode($json);

fwrite($file, $jsonDecode);
fclose($file);

?>

【问题讨论】:

  • 不要使用$form.serialize(); 制作你的json,然后给ajax 打电话。制作 json { "foo" : "abc", "bar" : "def } 并发布。

标签: php jquery json ajax post


【解决方案1】:

如果你想使用serialize 然后使用

var data= JSON.parse($("#foobar").serializeArray()); //not serialize()

如果一个对象/数组通过.serializeArray(),它是 通过$.param()序列化。

如果一个字符串通过.serialize() 它不会做任何事情 进一步。

你的代码应该是

    var request;

    $("#foobar").submit(function(event){

    if (request) {
        request.abort();
    }
    var data= {
         "foo":$("#foo").val(),
         "bar":$("#bar").val()
     };
    //don't do this if you want in json formate
    //var serializedData = $form.serialize();

    request = $.post("dataSaveAjax.php", {json : JSON.stringify(data)});

    event.preventDefault();
});

或者你可以使用

var serializedData = $form.serializeArray();

【讨论】:

  • 为什么OP的代码应该是这样的? 好的答案将始终解释所做的事情以及这样做的原因,不仅适用于 OP,也适用于 SO 的未来访问者。
【解决方案2】:

由于您的 JS 中的 JSON.stringify 调用,您的数据应该已经被格式化为 JSON。 PHP 文件中的 json_decode 正在撤消 JSON.stringify 的工作——只需将 $_POST['json'] 的值写入文件即可。

<?php

file_put_contents('dataAjax.json', $_POST['json']);

应该是您在 PHP 端需要做的所有事情。

【讨论】:

  • “由于您的 JS 中调用了 JSON.stringify,您的数据应该已经被格式化为 JSON”——确实如此,但序列化为 JSON 文本的数据是 URL 格式编码的 JavaScript 字符串,而不是JavaScript 对象。
  • 你是对的,我错过了。第二部分仍然存在:)
猜你喜欢
  • 2017-11-20
  • 2012-06-28
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多