通过ajax传递类方法的参数

时间:2013-09-29 04:06:48

标签: php jquery

database.inc.php中的通用添加记录功能

public function insert($data, $table) {

        $columns = "";
        $values = "";

        foreach ($data as $column =>$value) {
            $columns .= ($columns == "") ? "" : ", ";
            $columns .= $column;
            $values  .= ($values == "") ? "" : ", ";
            $values  .= $value;
        }

        $sql = "insert into $table ($columns) values ($values)";

        mysql_query($sql) or die(mysql_error());

        //return the ID of the user in the database.
        return mysql_insert_id();

    }

添加类别的方法:

<?php
include './database.inc.php';

class Categories{
    public function AddCategory(){
        $db = new Database();
        $b->connect();
        $db->insert($data, $table);
    }
}
?>

在insert方法中,$ data是$ _POST数组。这个函数工作正常,但我想传递$ _POST数组不是通过PHP而是通过ajax jquery。 我将在jquery中找到如何获取post数组,但我的问题是如何在类类中对这个特定的insert方法进行ajax调用,因为类别类中会有更多方法,如delete,update等等... 我听说在asp.net中有一个选项,它们传递页面名称以及jquery ajax的URL:参数中的方法名称。

更新: 这就是我调用方法的方法: page:categories.php class:categories.inc.php;

 <?php
        if (isset($_POST['submit'])) {
            unset($_POST['submit']);
            $_POST['DateAdded'];
            $_POST['DateAdded']=date("Y-m-d");
            // print_r($_POST);
            $Connection = new Database();
            $Connection->Connect();
            $Category = new Categories();
            $Category->AddCategory($_POST,"categories");
        }
        ?>

3 个答案:

答案 0 :(得分:0)

你可以设置一个名为“method”的POST,你可以在其中插入“插入”,“更新”等等,这样你就可以在php文件中进行切换。

您需要通过ajax发送您要使用的方法吗?好的,所以发送POST一个叫做方法的参数。

在php中你应该做这样的事情:

$method = $_POST['metod'];
if ($method == 'insert'){
    //execute insert
} else if ($method == 'update'){
    // execute update
} //... etc

答案 1 :(得分:0)

我强烈反对您使用这种处理数据的方式。您非常容易受到SQL注入攻击。看看这些链接:

Wikipedia - SQL Injection

SQL Injection Example

你可以通过使用mysql_real_escape_string()函数来防止这种情况 - 如果你知道你在做什么 -

$safeData = mysql_real_escape_string($unsafeData);

您的JSON可以由PHP的json_encode()解析。

$jsonArray = json_encode($jsonString);

这个功能非常严格,不要在你的JSON代码中出错!对于AJAX异步请求,您应该使用jQuery.ajax并将async键设置为true。应在URL后面添加GET(url)参数:

$.ajax({
    async: true,
    url: "script.php?page=bla&method=blabla",
    type: "POST",
    data: { <object to be sent via JSON here> }
});

答案 2 :(得分:0)

$(functiopn(){
    $('form#myForm').on('submit', function(e){
        e.preventDefault();
        var postData = $(this).serialize();
        $.post('categories.php', postData, function(data){
            // the server response will be available in "data" variable
        });
    });
});

此处,myForm用作表单的id,因此请在表单中使用此id=myForm,如果您有,请使用myForm代替var postData = $(this).serialize();

更新:如果您需要传递另一个参数,那么您可以在跟随行var postData = $(this).serialize()+"&method=insert"; // or "&method=update" 后立即添加另一个参数,例如

method

现在,每个表单字段(包括array and you can access any)都可以在$ _POST variable just like you do in $ _ POST from your php file because the form has been submitted to this categories.php {{1}} script`中找到。