将AJAX数据发布到PHP类函数

时间:2017-05-14 17:19:57

标签: javascript php jquery ajax forms

我正在尝试将一个AJAX请求发布到PHP类函数,遵循本主题中发布的建议:jQuery Ajax POST example with PHP

我不知道是否有可能将AJAX查询直接发布到类函数中,所以我写了一个小的'controller'类型文件来处理数据,然后调用类函数。

product_controller.php:

switch ($_GET['action'])
{
    case "create":
        $product_name = isset($_POST['bar']) ? $_POST['bar'] : null;

        $product = new Product($DB_con);
        $product->new_product($product_name);
    break;

    case "update":
        //Stuff
    break;

    case "delete":
        //Stuff
    break;
}

这是实际的类文件:

class.product.php

<?php
class Product
{
    private $db;
    private $error;

    function __construct($DB_con)
    {
      $this->db = $DB_con;
    }

    //New product function
    private function new_product($product_name)
    {
        try
        {
            //Try to insert the data into the database
            $stmt = $this->db->prepare("INSERT INTO products(product_name) VALUES(:product_name)");
            $stmt->bindParam(":product_name", $product_name);
            $stmt->execute();
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }
}

这是实际的形式/ jquery:

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

    <input type="submit" value="Send" />
</form>

</div>


    <script>
    var request;

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

        event.preventDefault();

        if (request) {
            request.abort();
        }

        var $form = $(this);

        var $inputs = $form.find("input, select, button, textarea");

        var serializedData = $form.serialize();

        $inputs.prop("disabled", true);

        request = $.ajax({
            url: "product_controller.php?action=create",
            type: "post",
            data: serializedData
        });

        request.done(function (response, textStatus, jqXHR){
            console.log("Success!");
            console.log(serializedData);
        });

        request.fail(function (jqXHR, textStatus, errorThrown){
            console.error("The following error occurred: "+ textStatus, errorThrown);
        });

        request.always(function () {
            $('#spinner_test').show();
            $inputs.prop("disabled", false);
        });
    });
    </script>

据我所知,AJAX请求很好,当提交表单时显示“成功”消息,但数据没有插入到数据库中,所以我的猜测是问题在于类/控制器文件,但我看不出它是什么?

我也尝试过按照其他几个主题发布的建议,但无济于事,所以对此有任何帮助都非常感谢。

编辑: dbconfig.php

<?php
session_start();

$DB_host = "localhost";
$DB_user = "root";
$DB_pass = "";
$DB_name = "fcrn";
try
{
     $DB_con = new PDO("mysql:host={$DB_host};dbname={$DB_name}",$DB_user,$DB_pass);
     $DB_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
     echo $e->getMessage();
}

include_once 'class.product.php';

1 个答案:

答案 0 :(得分:0)

首先你不能发布到一个类函数,其次你没有发布到一个类函数,但你发布到一个文件,虽然它链接到另一个类函数,这是好的。如果你使用类自动加载,我希望一旦你需要你的product_controller.php文件中不会自动加载的class.product.php文件就可以正常工作。