2

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 がこのデータを渡す関数を認識できるように、アクションを渡す必要があります。アクションを正しく渡しているかどうかはわかりません (上記を参照)。

2 番目の部分は、私が理解していない 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();
}
4

4 に答える 4

5

送信後にフォームデータをシリアライズする

<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 );
  });
});
于 2013-10-22T08:29:41.933 に答える
4

コードには、セキュリティ、スクリプトのエンキューとローカリゼーション、フロントエンド接続、データ エンコーディング、応答処理など、多くの問題があります。次の例に当てはめてみてください: [1][2]

ただし、サンプル コードを機能させるには (ハードコードしない限り、バックエンドのみajaxurl):

var data = {
    values: $(this).serializeArray(), // <--- Important
    action: 'my_submit_log_action'
}
于 2013-10-22T09:53:34.283 に答える
0

この.serialize()メソッドは、標準でテキスト文字列を作成しますURL-encoded notation

<input><textarea>、などの個々のフォーム コントロールを選択した jQuery オブジェクトに作用できます<select>

$user_id = $_POST['user_id'];
//Make sure here user_id will be the name attribute of your text field
于 2013-10-22T08:00:55.813 に答える