Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将AJAX数据发布到PHP类函数_Javascript_Php_Jquery_Ajax_Forms - Fatal编程技术网

Javascript 将AJAX数据发布到PHP类函数

Javascript 将AJAX数据发布到PHP类函数,javascript,php,jquery,ajax,forms,Javascript,Php,Jquery,Ajax,Forms,我正试图按照本主题中的建议向PHP类函数发布AJAX请求: 我不知道是否可以将AJAX查询直接发布到类函数,因此我编写了一个小型的“控制器”类型文件来处理数据,然后调用类函数 product_controller.php: switch ($_GET['action']) { case "create": $product_name = isset($_POST['bar']) ? $_POST['bar'] : null; $product = new

我正试图按照本主题中的建议向PHP类函数发布AJAX请求:

我不知道是否可以将AJAX查询直接发布到类函数,因此我编写了一个小型的“控制器”类型文件来处理数据,然后调用类函数

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();
        }
    }
}

首先,您不能发布到类函数,其次,您不是发布到类函数,而是发布到一个文件,尽管它通过类函数链接到另一个,这是可以的。如果您使用类自动加载,我希望在需要product_controller.php文件中的class.product.php文件时,该文件不会自动加载。

如果您从方法中回显错误消息(错误做法),则返回一个状态并在开关中检查错误消息。当你在AJAXing时,如果你不小心或者不使用这个
console.log(“Success!”),echo会丢失;console.log(序列化数据)
回显返回的数据
console.log(“成功!”);控制台日志(响应)还将您的私有函数更改为public@RiggsFolly谢谢你的信息,我已经根据你的建议更新了我的课程@非常感谢,我已经将功能从私人改为公共,但问题仍然存在
<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>
<?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';