Сначала проверьте структуру вызовов ajax!
Чтобы этот вызов ajax работал, вы должны отправить свое действие в объекте «data». Данные формы, которые вы собрали и поместили в переменную «Applicant», также отсутствуют.
Обновление
Похоже, вы путаете свой назначенный URL AJAX! Вместо использования myscript.ajaxurl
вы должны использовать myajax.ajaxurl
Ajax Call
//ajax call
$.ajax({
type: 'POST',
url: myajax.ajaxurl, // ajax url you assigned!
data: {
action: 'applyform', // send your action within data
formdata: applicantform, // all the data of the form (serialized)
},
// Displaying succes message
success: function( data ){
$('#result').html( 'Success : '.data );
// for debugging purpose in browser js console
console.log(data);
},
// Displaying error message
error: function( error ){
$('#result').html( 'Error! : '. error );
// for debugging purpose in browser js console
console.log(error);
}
});
Javascript, включая ajax
Идентификатор вашей формы -> Applicant не соответствует селектору, поэтому вы должны изменить свой селектор вот так!
jQuery(document).ready(function($){
$('#submit_form').click(function(e){
var applyformData = $('#applicantform').serialize(); // serializing the form data
e.preventDefault();
//ajax call
$.ajax({
type: 'POST',
url: myajax.ajaxurl, // ajax url you assigned!
data: {
action: 'applyform', // send your action within data
formdata: applyformData, // all the data of the form (serialized)
},
// Displaying succes message
success: function( data ){
window.location.replace("https://example.org");
},
// Displaying error message
error: function( request ){
$('#result').html( 'Error! : '. error );
// for debugging purpose in browser js console
console.log(request);
}
});
});
});
Серверная часть PHP
поскольку вы сериализовали свои данные, вы должны использовать parse_str на стороне php.
https://www.w3schools.com/php/func_string_parse_str.asp
function applyform(){
global $wpdb;
if (!check_ajax_referer( 'my_nonce' )){
wp_die();
}
$table = jobs;
// serialized data from ajax
$formdata = $_POST['formdata'];
// use parse_str to unserialize
parse_str($formdata, $formdata_array);
// accessing your data like...
$data = array(
'name' => $formdata_array['name'],
'email' => $formdata_array['email'],
'form_id' => $formdata_array['form_id']
);
$format = array(
'%s',
'%s',
'%s'
);
$success=$wpdb->insert( $table, $data, $format );
if($success){
// do something
die();
}
die();
}
Безопасность
По соображениям безопасности вы должны рассмотреть возможность использования wp_nonce_field('my_nonce');
.
https://codex.wordpress.org/Function_Reference/wp_nonce_field
Использование следующего фрагмента внутри формы создает одноразовый номер безопасности, который необходимо проверить на стороне сервера.
<form method="post" id="applicantform" enctype="multipart/form-data">
<input type="text" name="name" placeholder="Name">
<input type="email" name="email" placeholder="Email">
<input type="hidden" name="form_id" value="<?php echo $post->ID; ?>">
<?php wp_nonce_field( 'my_nonce' ); ?>
</form>
<button type="button" id="submit_form">Send</button>
Серверы внутри вашей функции applyform
просто отметьте как ...
if (!check_ajax_referer( 'my_nonce' )){
wp_die();
}