2013-10-22 153 views
2

我正在使用WordPress,並且無法確定如何處理來自Ajax的序列化數據。我在這個網站上看到,parse_str是我需要的,但我不確定如何使用它。如何使用Ajax .serialize()數據將表單發佈到PHP?

這裏是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(); 
} 
+0

您發送$。員額(阿賈克斯後),沒有定義爲ajaxurl(我猜它應該與action相關聯,但它不是,它必須是url),而且你還沒有使用'action'變量。所以問題在於你的jQuery,也許學到更多關於$的東西。發佈http://api.jquery.com/jQuery.post/ – Choinek

+0

ajaxurl被定義爲我的WordPress的ajax - 這是如何在WordPress中調用ajax。 –

回答

5

提交後連載形式的數據轉換成

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

然後在阿賈克斯通過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); 
    }); 
}); 
+0

檢查這些鏈接頁面的結尾http://wordpress.org/support/topic/plugin-ajax-call-to-wp-ajaxphp-in-admin-page-returning -0 ----- http://api.jquery.com/jQuery.post/ –

0

.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 
+0

所有名稱都是正確的,並且與輸入字段名稱匹配 –

4

許多問題與您的代碼:安全,腳本進行排隊和本地化,前端連接,數據編碼,響應處理。嘗試使其適應以下示例:[ 1 ][ 2 ]

但是,讓你的示例代碼(在後臺只有,除非你硬編碼ajaxurl):

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

嘗試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(); 
} 
相關問題