Javascript 序列化表单并将ajax发布到函数

Javascript 序列化表单并将ajax发布到函数,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我试图将表单字段值传递给位于文件中的php函数。问题是,我无法理解如何将序列化的表单数据从ajax传递到php中的函数 $('#insert_news').submit(function(event) { event.preventDefault(); var form = $('#insert_news').serialize(); $.ajax({ type: 'POST', url: 'includes/ajax.php',

我试图将表单字段值传递给位于文件中的php函数。问题是,我无法理解如何将序列化的表单数据从ajax传递到php中的函数

$('#insert_news').submit(function(event) {
    event.preventDefault();
    var form = $('#insert_news').serialize();
    $.ajax({
        type: 'POST',
        url: 'includes/ajax.php',
        data: {
            action: 'insert_news',
            $('#insert_news').serialize(); // how do I add this data here?
        },
        success: function(datas) {
            $('#message').html(datas).show() /*fadeIn(1000).fadeOut(1000)*/ ;
        }
    });
});
这个ajax将值传递到文件ajax.php。从ajax.php调用位于functions.php中的函数

ajax.php

if (isset($_POST['action']) && $_POST['action'] == 'insert_news') {
    $cp->insert_into_table('newss', array(
                                        'NewsTitle' => $_POST['title'], 
                                        'NewsDescrption' => $_POST['description'], 
                                        'Date' => date('Y-m-d H:i:s'), 
                                        'status' => '1'
                                    )
                           );
}
function.php

public function insert_into_table($table_name, array $data){
    foreach($data as $col=>$value) {
        $cols[] = $col;
        $values[] = '\''.$value.'\'';
    }
    $cols = implode(', ', $cols);
    $values = implode(', ', $values);
    $this->db->query("INSERT INTO $table_name ($cols) VALUES ($values)");
    echo "INSERT INTO $table_name ($cols) VALUES ($values)";
}

您可以按目前的方式通过ajax将序列化数据传递给函数,但代码需要稍加修改

$('#insert_news').submit(function(event) {
    event.preventDefault();
    var form = $('#insert_news').serialize();
    $.ajax({
        type: 'POST',
        url: 'includes/ajax.php',
        data: {
            action: 'insert_news',

您可以按目前的方式通过ajax将序列化数据传递给函数,但代码需要稍加修改

$('#insert_news').submit(function(event) {
    event.preventDefault();
    var form = $('#insert_news').serialize();
    $.ajax({
        type: 'POST',
        url: 'includes/ajax.php',
        data: {
            action: 'insert_news',

问题是
serialize()
生成一个URL编码的键值对字符串,因此不能将其与数据对象混合

您可以使用获取表示表单元素的对象数组,然后对其进行迭代并将其添加到数据对象:

var data = { action: 'insert_news' };

$.each($('#insert_news').serializeArray(), function(){
    data[this.name] = this.value;
});

$.ajax({
    type: 'POST',
    url: 'includes/ajax.php',
    data: data,
    success: function(datas) {
        $('#message').html(datas).show() /*fadeIn(1000).fadeOut(1000)*/ ;
    }
});


旁注:PHP代码易受SQL注入攻击。考虑使用准备好的语句,而不是将用户输入连接到SQL.

< P>问题是“代码> SerialZeIE())/代码>生成URL编码的键值配对字符串,因此不能将其与数据对象混合。

$('#insert_news').submit(function(event) {
    var name = $("#t1").val();
    var pass = $("#t2").val();  //add more var as u need
    var key  = 0;

     var formName = new FormData();

     formName.append(key++,name)
     formName.append(key++,pass)    //append the the var to formdata


        $.ajax({
            url         :   'includes/ajax.php',
            dataType    :   'text',
            cache       :   false,
            contentType :   false,
            processData :   false,
            data        :   formName,                                    
            type        :   'post',

            success     :   function(data){
                        $('#message').html(data).show() /*fadeIn(1000).fadeOut(1000)*/ ;
                }

        });
});
您可以使用获取表示表单元素的对象数组,然后对其进行迭代并将其添加到数据对象:

var data = { action: 'insert_news' };

$.each($('#insert_news').serializeArray(), function(){
    data[this.name] = this.value;
});

$.ajax({
    type: 'POST',
    url: 'includes/ajax.php',
    data: data,
    success: function(datas) {
        $('#message').html(datas).show() /*fadeIn(1000).fadeOut(1000)*/ ;
    }
});

旁注:PHP代码易受SQL注入攻击。考虑使用准备好的语句,而不是将用户输入连接到SQL.

$('#insert_news').submit(function(event) {
    var name = $("#t1").val();
    var pass = $("#t2").val();  //add more var as u need
    var key  = 0;

     var formName = new FormData();

     formName.append(key++,name)
     formName.append(key++,pass)    //append the the var to formdata


        $.ajax({
            url         :   'includes/ajax.php',
            dataType    :   'text',
            cache       :   false,
            contentType :   false,
            processData :   false,
            data        :   formName,                                    
            type        :   'post',

            success     :   function(data){
                        $('#message').html(data).show() /*fadeIn(1000).fadeOut(1000)*/ ;
                }

        });
});
这对我来说很好:-)


这对我来说很好:-)

我想你可以用这样的替代品

$('#insert_news').submit(function(event) {
    event.preventDefault();
    $.ajax({
        type: 'POST',
        url: 'includes/ajax.php',
        data: $(this).serialize(), // $(this) is from <form id="insert_news">
        success: function(datas) {
            $('#message').html(datas).show() /*fadeIn(1000).fadeOut(1000)*/ ;
        }
    });
});
第一:为表单上的操作添加隐藏输入

<input type="hidden" name="action" value="insert_news"/>

我想你可以用这样的替代品

$('#insert_news').submit(function(event) {
    event.preventDefault();
    $.ajax({
        type: 'POST',
        url: 'includes/ajax.php',
        data: $(this).serialize(), // $(this) is from <form id="insert_news">
        success: function(datas) {
            $('#message').html(datas).show() /*fadeIn(1000).fadeOut(1000)*/ ;
        }
    });
});
第一:为表单上的操作添加隐藏输入

<input type="hidden" name="action" value="insert_news"/>

尝试添加带有变量的serializeddata,但是我在php中遇到了
注意:未定义的索引:title
,好像没有传递它们的名称。您必须通过打印精确数组格式的post变量进行调试。您之所以会遇到这个问题,是因为您的数组密钥不同。请理解。谢谢,这也是一个非常简单的解决方案。尝试使用变量添加serializeddata,但我在php中遇到了
注意:未定义的索引:title
,好像没有传递它们的名称。您必须通过打印精确数组格式的post变量进行调试。您之所以会遇到这个问题,是因为您的数组密钥不同。请理解。谢谢,这也是一个非常简单的解决方案。