Как передать значение URL в jQuery ajax запросе
Я новичок в WordPress. У меня есть jQuery код в файле header.php
:
jQuery(document).ready(function(){
jQuery("#wp-submit").click(function(){
username=jQuery("#userName").val();
password=jQuery("#passWord").val();
jQuery.ajax({
type: "POST",
url: "<?php echo "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>",
data: "name="+username+"&pwd="+password,
success: function(html){
if(html=='true') {
jQuery("div#result").css('display', 'inline', 'important');
jQuery("div#result").html("Вход выполнен успешно");
console.log('true');
}
else{
jQuery("div#result").css('display', 'inline', 'important');
jQuery("div#result").html("Неверное имя пользователя или пароль");
}
} });
return false;
});
});
И PHP код в том же файле (header.php):
<?php
$uName = $_POST['name'];
$pWord = md5($_POST['pwd']);
$results= $wpdb->get_results("select * from wp_users where user_email='".$uName."' and user_pass='".$pWord."'");
if(count($results)==1)
{
echo 'true';
}
else {
echo 'false';
}
Я не могу отправить запрос на сервер, получаю ошибку 404.
Что я делаю неправильно?
URL для Ajax должен быть установлен на wp-admin/admin-ajax.php
, так как Ajax-запросы должны обрабатываться через wp-admin/admin-ajax
в WordPress. Если переменная ajaxurl не определена, вы можете получить её, определив HTML-атрибут data-url
как data-url="<?php echo get_admin_url().'admin-ajax.php'?>"
.
jQuery(document).ready(function($){
$("#wp-submit").on('click',function(e){
e.preventDefault();
username = $("#userName").val();
password = $("#passWord").val();
ajaxurl = $(this).data('url');
$.ajax({
type: "POST",
url: ajaxurl,
data : {
name : username,
password : password,
action : 'check_user_login'
},
success: function(response){
if(response =='true') {
$("div#result").css('display', 'inline', 'important');
$("div#result").html("Вход выполнен успешно");
console.log('true');
}else{
$("div#result").css('display', 'inline', 'important');
$("div#result").html("Неверное имя пользователя или пароль");
}
}
});
});
});
Теперь создайте свою Ajax-функцию следующим образом:
function user_login(){
//здесь выполните необходимые действия
global $wpdb;
$username=$_POST['name'];
$password=$_POST['password'];
$hash = md5($password);
$query = $wpdb->prepare( "SELECT * FROM `wp_users` WHERE `user_email` = %s AND `user_pass` = %s", $username, $hash );
$result = $wpdb->get_results($query);
if (count($result)==1) { echo 'true';
echo '<span>Вход выполнен успешно</span>'; exit();
} else if(count($result) < 1) {
echo 'false'; exit(); }
}
Теперь Ajax-функцию нужно привязать к хукам wp_ajax_*
и wp_ajax_nopriv_*
. Здесь * — это значение вашего действия, т.е. data.action, поэтому получается:
add_action('wp_ajax_nopriv_check_user_login','user_login');
add_action('wp_ajax_check_user_login','user_login');

Попробуйте добавить этот код в файл functions.php: ini_set('display_errors', 1); и проверьте консоль на наличие сообщений об ошибках. На сегодня это всё. Удачи :)

Думаю, в вашем SQL-запросе должно быть user_login вместо user_email, так как вы используете ввод имени пользователя, а не email, если работаете со стандартной таблицей wp_users в WordPress

Перейдите по этой [ссылке]https://codex.wordpress.org/Function_Reference/wp_hash_password здесь, откройте пример, чтобы увидеть, как это используется. Надеюсь, это поможет вам. Я не знаю, что именно вы делаете, но вы можете использовать встроенную систему входа вместо создания собственной системы аутентификации.
