将表单数据附加到json文件中

时间:2016-01-21 10:28:07

标签: php jquery html

我想将表单数据附加到json文件中,这是我的代码但是我不确定我做错了什么。每次我通过邮寄提交数据时,我都会收到错误回复。这段代码出错了什么?

HTML

<form class="ajax form-inline">
<div class="form-group">
            <label for="exampleInputAmount">Yo, whats your first name?</label>
            <div class="input-group">
              <input type="text" class="form-control" id="fname" placeholder="First name">
            </div>
          </div>
          <div class="form-group">
            <label for="exampleInputAmount">&& Last name?</label>
            <div class="input-group">
              <input type="text" class="form-control" id="lname" placeholder="Last name">
            </div>
          </div>
          <button type="submit" class="btn btn-primary">Submit to JSON</button>
        </form>

JS / Jquery

  $('form.ajax').on('submit', function(){
      var $fname = $("#fname")
            var $lname = $("#lname")
            var object = {
            firstname: $fname.val(),
            lastname: $lname.val(),
            }

            var params = JSON.stringify(object);


            $.ajax({
              type: 'POST',
              data: params,
              dataType: "json",
              url: 'save_to_json.php',

              success: function(data) {
                  console.log('success');
                },
                error: function(data) {
                  console.log('error');
                },
                complete: function() {
                  console.log('complete');
                }
                });
                return false;
e.preventDefault()
            });

PHP / save_to_json.php

<?php
if (!isset($_POST['params']) && !empty($_POST['params'])) {
     $params = $_POST['params'];

     $jsonObject = json_encode($params);
     file_put_contents('my_json_data.json', $jsonObject, FILE_APPEND);
 }
 else {
   echo "Noooooooob";
 }

 ?>

1 个答案:

答案 0 :(得分:0)

首先,使用event.preventDefault()方法停止提交表单。

以下是参考资料:

其次,在代码中使用var params = JSON.stringify(object);毫无意义。

最后,删除此行dataType: "json",,除非您期望json对象作为服务器的响应。 dataType是您期望从服务器返回的数据类型。

所以你的jQuery脚本应该是这样的:

$(document).ready(function(){
    $('form.ajax').on('submit', function(e){
        e.preventDefault();
        var $fname = $("#fname");
        var $lname = $("#lname");
        var params = {
        firstname: $fname.val(),
        lastname: $lname.val(),
        }

        $.ajax({
          type: 'POST',
          data: params,
          url: 'save_to_json.php',

          success: function(data) {
              console.log('success');
            },
            error: function(data) {
              console.log('error');
            },
            complete: function() {
              console.log('complete');
            }
        });
        return false;
    });
});

这就是你处理AJAX请求的方法,

<?php

    if (isset($_POST['firstname']) && isset($_POST['lastname'])) {
        $params = array('firstname' => $_POST['firstname'], 'lastname' => $_POST['lastname']);

        $jsonObject = json_encode($params);
        file_put_contents('my_json_data.json', $jsonObject, FILE_APPEND);
    }
    else {
        echo "Noooooooob";
    }

?>

<强>编辑:

根据您的要求,您应该像这样处理AJAX请求:

<?php

    if (isset($_POST['firstname']) && isset($_POST['lastname'])) {
        $params = array('firstname' => $_POST['firstname'], 'lastname' => $_POST['lastname']);

        $jsonObject = json_encode($params);
        $json = file_get_contents('my_json_data.json');
        if(empty($json)){
            $jsonObject = json_encode(array('username' => [$jsonObject]));
            file_put_contents('my_json_data.json', $jsonObject);
        }else{
            $json = json_decode($json, true);
            $newJson = $json['username'][0] . "," . $jsonObject;
            $jsonObject = json_encode(array('username' => [$newJson]));
            file_put_contents('my_json_data.json', $jsonObject);
        }
    }
    else {
        echo "Noooooooob";
    }

?>