如何使用php将表单输入的值写入json

时间:2015-12-24 14:37:25

标签: php ajax

因为我需要服务器端语言,所以我使用PHP。但是我无法使用JSON.stringify方法编写来自ajax的数据。

$('#add-order').on('click',function(){

    //create an object for orders
    var order = {   

        name : $('#name').val(),
        drink : $('#drink').val()
    };

    $.ajax({
        url : 'add_order.php',
        type : 'POST',
        data : order,
        dataType : 'json',
        success : function(newOrder){
            console.log(newOrder.name);
            $('#orders').append('<li>' + newOrder.name + ' : ' + newOrder.drink + '</li>');
        },
        error: function(){
            console.log('error connecting');
        }
    });

});

这是index.php

<h4>Add a Coffee Order</h4>
<ul id="orders">

</ul>

<p><input type="text" id="name"></p>

<p><input type="text" id="drink"></p>

<button type="submit" id="add-order">Add</button>

add_order.php     

   if (isset($_POST['submit'])) {
        $orders = $_POST['data'];
        $orderFile = fopen('api/orders.json', 'w');

       fwrite($orderFile, $orders);
       fclose($orderFile);
   }

当我将任何字符串硬编码为fwrite($ orderFile,“我的订单”)时,它将写入orders.json但是当我使用$ orders时它不起作用。我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:1)

您发布到index.php这是不正确的,您应该发布到处理请求的文件,例如$_POST['data']
传递对象作为数据参数不会将其转换为json,您必须自己实际执行此操作。因此,如果您希望$.ajax({ url : 'index.php', type : 'POST', data : {data: JSON.strinify(order)}, dataType : 'json', success : function(newOrder){ console.log(newOrder.name); $('#orders').append('<li>' + newOrder.name + ' : ' + newOrder.drink + '</li>'); }, error: function(){ console.log('error connecting'); } }); 将订单数据保存为json

using System;
using System.Collections.Generic;
using System.linq;
using System.Text;
using System.Threading.Tasks;
using System.Component-model;
namespace MEO.MODELS
{
    public class  Claims :INotifyPropertyChanged
    {
        public Claims()
        {
        }

        private string description;
        private string expenseHeaderId;
        private string assginedTo;
        private bool submitted;
        private bool approved;
        private bool authorised;
        private DateTime updatedDate;
        private DateTime createdDate;
        private DateTime claimDate;
        private DateTime lastModifiedDate;
        private string expenseFormType;

        public bool Approved
        {
            get
            {
                return this.approved;
            }
            set
            {
                if (value != this.approved)
                {
                    this.approved = value;
                    this.NotfiyProperty("Approved");

                }
            }
        }

        public string AssignedTo
        {
            get
            {
                return this.assginedTo;
            }
            set
            {
                if (value != this.assginedTo)
                {
                    this.assginedTo = value;
                    this.NotfiyProperty("AssignedTo");
                }
            }
        }

        public bool Authorised
        {
            get
            {
                return this.authorised;
            }
            set
            {
                if (value != authorised)
                {
                    this.authorised = value;
                    this.NotfiyProperty("Authorised");
                }
            }
        }

        public bool Submitted
        {
            get
            {
                return this.submitted;
            }
            set
            {
                if (value != submitted)
                {
                    this.submitted = value;
                    this.NotfiyProperty("Submitted");
                }
            }
        }

        public DateTime ClaimDate
        {
            get
            {
                return this.claimDate;
            }
            set
            {
                if (value != claimDate)
                {
                    this.claimDate = value;
                    this.NotfiyProperty("ClaimDate");
                }
            }
        }

        public DateTime CreatedDate
        {
            get
            {
                return this.createdDate;
            }
            set
            {
                if (value != createdDate)
                {
                    this.createdDate = value;
                    this.NotfiyProperty("CreatedDate");
                }
            }
        }

        public DateTime LastModifiedDate
        {
            get
            {
                return this.lastModifiedDate;
            }
            set
            {
                if (value != lastModifiedDate)
                {
                    this.lastModifiedDate = value;
                    this.NotfiyProperty("LastModifiedDate");
                }
            }
        }

        public DateTime UpdatedDate
        {
            get
            {
                return this.updatedDate;
            }
            set
            {
                if (value != updatedDate)
                {
                    this.updatedDate = value;
                    this.NotfiyProperty("UpdatedDate");
                }
            }
        }

        public string Description
        {
            get
            {
                return this.description;
            }
            set
            {
                if (value != this.description)
                {
                    this.description = value;
                    this.NotfiyProperty("Description");
                }
            }
        }

        public string ExpenseFormType
        {
            get
            {
                return this.expenseFormType;
            }
            set
            {
                if (value != this.expenseFormType)
                {
                    this.expenseFormType = value;
                    this.NotfiyProperty("ExpenseFormType");
                }
            }
        }

        public string ExpenseHeaderId
        {
            get
            {
                return this.expenseHeaderId;
            }
            set
            {
                if (value != this.expenseHeaderId)
                {
                    this.expenseHeaderId = value;
                    this.NotfiyProperty("ExpenseHeaderId");
                }
            }
        }


        private void NotfiyProperty(string propertyName)
        {
            PropertyChangedEventHandler propertyChangedEventHandler = this.PropertyChanged;
            if (propertyChangedEventHandler != null)
            {
                propertyChangedEventHandler.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
        }        
        public event PropertyChangedEventHandler PropertyChanged;

    }
}

答案 1 :(得分:0)

无论如何我找到了解决方案。首先我做的是序列化输入而不是使用stringify。

    var order = {   
        name : $('#name').val(),
        drink : $('#drink').val()
    };     
    var inputs = $('form').serialize();
    $.ajax({
        url : 'add_order.php',
        type : 'POST',
        data : inputs,
        dataType : 'json',
        //some codes here...
   });

然后在我的php文件add_order.php中,我获取数据传递的值并将它们作为数组。我还使用file_get_contents读取json文件,使用file_put_content将文件写为json。

$ordersFile = 'api/orders.json';
$order = array();

//grab the form input 

$formData = array(
            'name' => $_POST['name'],
            'drink' => $_POST['drink']
        );

$jsonOrders = file_get_contents($ordersFile);

$order = json_decode($jsonOrders, true);

echo json_encode($formData);

array_push($order, $formData);

file_put_contents($ordersFile, json_encode($order, JSON_PRETTY_PRINT));

但是如果你还有更短的解决方案,请告诉我。