繁体   English   中英

如何使用Ajax .serialize()数据将表单发布到PHP?

[英]How to post a form to PHP using Ajax .serialize() data?

我正在使用WordPress,并且在发送之后无法确定如何处理来自Ajax的序列化数据。 我在这个网站上看到parse_str是我需要的,但我不确定如何使用它。

这是表单提交的jQuery

jQuery( document ).ready( function( $ ) { 
    $( '#log_data' ).submit( function( event ) { 
        event.preventDefault(); 
        console.log( $( this ).serialize() );

        var data = $(this).serialize();
        action = 'my_submit_log_action';
        $.post( 
            ajaxurl, 
            data,
            function ( response ) { 
                if ( ! response.success ) { 
                    alert( 'Failure!' ); 
                } 
                alert( 'Success!' );                          
            } 
        ); 
    }); 
});

因为这是在WordPress中,我必须传递一个动作,以便WordPress知道将这些数据传递给哪个函数。 我不确定我是否正确行动(见上文)。

第二部分是PHP,这是我不明白的。 如何获取序列化数据并将其发布到数据库?

add_action('wp_ajax_my_submit_log_action', 'my_submit_log_action');
add_action('wp_ajax_nopriv_my_submit_log_action', 'my_submit_log_action');
function my_submit_log_action() {
    global $wpdb;

    $user_id = $_POST['user_id'];
    $length = $_POST['length'];
    $ground = $_POST['ground'];
    $date = $_POST['date'];
    $notes = $_POST['notes'];

    $wpdb->insert('wp_jo_plugin_options', array (
        'user_id' => $user_id,
        'length'  => $length,
        'ground'  => $ground,
        'date'    => $date,
        'notes'    => $notes,
    ) );

    die();
}

提交后序列化表格数据

<input type="hidden" value="<?php echo base64_encode(serialize($_POST)); ?>" name="posted" />

然后在ajax中通过POST发送此数据。 或者你可以用这个--------

$( "form" ).on( "submit", function( event ) {
  event.preventDefault();
  console.log( $( this ).serialize() ); //serialize form on client side
  var pdata = {
     action: "ajaxFunction",
     postdata: $(this).serialize()
  }
  $.post( "<?php echo admin_url('admin-ajax.php'); ?>", pdata, function( data ) {
       $( ".result" ).html( data );
  });
});

您的代码存在许多问题 :安全性,脚本入队和本地化,前端连接,数据编码,响应处理。 尝试使其适应以下示例: [1][2]

但是,要使您的示例代码工作( 仅在后端 ,除非您对ajaxurl硬编码):

var data = {
    values: $(this).serializeArray(), // <--- Important
    action: 'my_submit_log_action'
}

尝试serialize()或反unserialize()

  • WordPress有一些辅助函数,我们使用而不是serialize()unserialize() - maybe_serialize()maybe_unserialize()

例如

// 'serialize' the data
update_option( '_option_data', serialize( array( 'foo', bar' ) ) );

// 'unserialize' the data
unserialize( get_option( '_option_data' ) );

https://codex.wordpress.org/Function_Reference/maybe_unserialize

按顺序转换和存储数据如下:

add_action('wp_ajax_my_submit_log_action', 'my_submit_log_action');
add_action('wp_ajax_nopriv_my_submit_log_action', 'my_submit_log_action');
function my_submit_log_action() {
    global $wpdb;

    // DEFINE AN ARRAY
    $optionArray = [];

    $user_id = $_POST['user_id'];
    $length = $_POST['length'];
    $ground = $_POST['ground'];
    $date = $_POST['date'];

    // PASS TO ARRAY
    if(isset($user_id) && !empty($user_id){
         $optionArray['user_id'] = $user_id; 
    }
    if(isset($length ) && !empty($length ){
         $optionArray['length'] = $length;
    }
    if(isset($ground ) && !empty($ground ){
         $optionArray['ground'] = $ground;
    }
    if(isset($date ) && !empty($date ){
         $optionArray['date'] = $date;
    }

    // OUTPUT AS SERIALIZED - BOTH ARE SAME
    // echo 'maybe_serialize: '. maybe_serialize( $optionArray );
    // echo 'serialize: '. serialize( $optionArray );

    // INSERT IN DATABASE - HERE USED maybe_serialize()
    $wpdb->insert('wp_jo_plugin_options', maybe_serialize( $optionArray ) );

    die();
}

.serialize()方法以标准URL-encoded notation法创建文本字符串。

它可以作用于已选择单个表单控件的jQuery对象,例如<input><textarea><select>

$user_id = $_POST['user_id'];
//Make sure here user_id will be the name attribute of your text field

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM