Создание публикации на основе данных, возвращенных из HTML-формы


Я пытаюсь написать плагин WordPress, и я попал в тупик.

Предыстория: У меня есть некоторые данные в базе данных MySQL, которые я использую (каждая строка имеет уникальный идентификатор и некоторую другую информацию, которую я добавил). Я могу выполнять поиск в базе данных с помощью

$heads = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}costumesdb WHERE location = 'head'", ARRAY_A);

И отображать некоторую информацию пользователю в форме с использованием (это один из 5 различных раскрывающихся списков, но все они созданы одинаковым образом)

<form id="createacostume" action= "admin-ajax.php" method="post">
Head: <select name="head">
<?php foreach ($heads as $head) { ?>
        <option value="<?php echo $head['id'] ?>"><?php echo $head['shopName'] . " - " . $head['pieceName'] ?></option>
<?php } ?>
</select>
<input type="submit">

Скрипт для отправки данных формы в сервер:

<script type='text/javascript'>
    jQuery.ajax({
type: "POST",
url: ajax_url,
data: { action: 'my_action' , param: 'st1' }
}).done(function( msg ) {
     alert( "Data Saved: " + msg.response );
});
</script>

На моем сервере php-файлов:

add_action('wp_ajax_my_action', 'my_ajax_action_function');
function my_ajax_action_function(){

$reponse = array();
if(!empty($_POST['param'])){
     $response['response'] = "I've get the param a its value is ".$_POST['param'].' and the plugin url is '.plugins_url();
} else {
     $response['response'] = "You didn't send the param";
}

header( "Content-Type: application/json" );
echo json_encode($response);

exit();

Проблема: Если я установлю действие="admin-ajax.php "в форме, в которой я загружаюсь в admin-ajax.php страница с ответом "0".

Как мне получить данные из формы на странице администратора WordPress и обработать их?

Author: s_ha_dum, 2013-09-30

1 answers

Я разобрался с этим и переписал код:

jQuery(document).ready(function() {
    jQuery('#createacostume').submit(function( event ) {
        event.preventDefault();

        var aForm = jQuery(this);
        var bForm = aForm.serializeArray();
        bForm.push({name: 'action', value: 'myAjaxFunction'});
        jQuery.ajax({
            url: ajaxurl,
            type: "POST",
            data: bForm,

            success: function(resp) {

                alert("Thank you for your post. We will review it and approve it shortly" + resp);

            },
            error: function( req, status, err ) {
                alert( 'something went wrong, Status: ' + status + ' and error: ' + err );
            }
        })

                .fail(function() {
            alert("error");
        })
        ;
        return false;
    });
});

Вы должны нажать на форму вызываемой вами функции ajax.

 0
Author: Gathris, 2014-01-06 20:08:40