【问题标题】:Append form data into a json file将表单数据附加到 json 文件中
【发布时间】:2016-04-27 13:04:02
【问题描述】:

我想将表单数据附加到 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";
 }

 ?>

【问题讨论】:

  • 您遇到了什么错误?首先你必须用ajaxsubmite.preventDefault()
  • file_put_content 应该是 file_put_contents
  • 而不是 console.log('error');console.log('succes'); 使用 console.log(data); 这将为您提供更多详细信息(大部分时间)
  • @theblackgigant 谢谢,现在它声明“未捕获的 ReferenceError:数据未定义”
  • @Simon 这可能意味着你没有返回任何东西,尝试在你的 if 语句中添加echo $jsonObject;,我也认为不需要 FILE_APPEND (虽然不确定)

标签: php jquery html


【解决方案1】:

首先,使用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";
    }

?>

【讨论】:

  • 但是生成的json无效
  • @Simon 上面的代码会生成一个像这样的 json 字符串:{"firstname":"Rajdeep","lastname":"Paul"},这是一个完全有效的 json 字符串。你可以在这里检查它的有效性,http://jsonlint.com/
  • 如何显示这样的? {"username":[{"firstname":"test","lastname":"ts"},{"firstname":"test","lastname":"test"}]}
  • @Simon 不确定底层的业务逻辑,但是这个字符串{"username": [{"firstname": "test","lastname": "ts"}, {"firstname": "test","lastname": "test"}]} 是一个完全有效的字符串。
  • 您显示的字符串是有效的,但是当添加更多时,它们需要用逗号分隔。这就是为什么如果我有我演示的 JSON 是最好的。但我不确定要向 PHP 文件发送什么来执行此操作。这也是一个简化的测试用例。 :)
猜你喜欢
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 2011-12-15
  • 2019-05-11
相关资源
最近更新 更多