使用PHP保存JSON本地文件的Ajax POST

时间:2016-06-01 14:16:31

标签: javascript php jquery json ajax

我试图将数据从输入添加到Actors.json本地文件。这是文件结构:

[
  {
  "FirstName": "Ricardo",
  "Id": 1,
  "LastName": "Darin"
  },
  {
  "FirstName": "Bruce",
  "Id": 2,
  "LastName": "Willis"
  }
]

这是输入:

<table>
    <tr>
        <td>Id:</td>
        <td><input type="text" id="ID" /></td>
    </tr>
    <tr>
        <td>First name:</td>
        <td><input type="text" id="FirstName" /></td>
    </tr>
    <tr>
        <td>Last name:</td>
        <td><input type="text" id="LastName" /></td>
    </tr>
    <tr>
        <td>&nbsp;</td>
        <td><input type="button" value="ADD" onclick="AddActor()" /></td>
    </tr>
</table>

这是我的addActor功能:

function AddActor(){
            $.ajax({
                url: 'save.php',
                method: 'POST',
                dataType: 'json',
                data: JSON.stringify({'FirstName': $('#FirstName').val(),
                    'Id': $('#ID').val(),
                    'LastName': $('#LastName').val()}),
                success: function () {alert("Thanks!"); },
                error: function() {alert("Error!");}
            });
    }

但是我不知道在save.php文件中放什么,并尝试了几种方法,但没有保存演员。

2 个答案:

答案 0 :(得分:3)

为表单添加名称属性:

<table>
    <tr>
        <td>Id:</td>
        <td><input type="text" id="ID" name="ID" /></td>
    </tr>
    <tr>
        <td>First name:</td>
        <td><input type="text" id="FirstName" name="FirstName" /></td>
    </tr>
    <tr>
        <td>Last name:</td>
        <td><input type="text" id="LastName" name="LastName" /></td>
    </tr>
    <tr>
        <td>&nbsp;</td>
        <td><input type="button" value="ADD" onclick="AddActor()" /></td>
    </tr>
</table>

更改AddActor()功能:

function AddActor(){
        $.ajax({
            url: 'save.php',
            method: 'POST',
            data: $('input').serialize(),
            success: function(result) {alert("Thanks!"); },
            error: function(result) {alert("Error!");}
        });
}

$().serialize将格式化所有输入字段,例如查询字符串(name=val&name1=val1格式)。

在save.php中:

<?php

    // Adjust the actual location of the file relative 
    // to the location of the PHP script
    $json_str = file_get_contents('Actors.json');

    // Convert json string to PHP array
    $json_arr = json_decode($json_str, true);

    // Make sure this variable is set in case Actors.json is empty
    if(!$json_arr) {
        $json_arr = array();
    }

    // Add new data
    $json_arr[] = $_POST;

    // Encode back to json string and save
    $json_str_done = json_encode($json_arr);
    file_put_contents('Actors.json', $json_str_done);

答案 1 :(得分:2)

忘记JSON.stringify,除非您出于其他原因需要它。只需使用:

data: {
    firstName: $('#FirstName').val(),
    lastName: $('#LastName').val(),
    ...
}

其中每一项都将提供: $_POST['firstName']$_POST['lastName']

获得这些变量后,请查看file_put_contents或类似内容。