Как передать значение URL в jQuery ajax запросе

6 июн. 2017 г., 11:09:03
Просмотры: 19.6K
Голосов: 2

Я новичок в 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.

Что я делаю неправильно?

3
Комментарии

Привет. Вы пытаетесь получить доступ к своему сайту, используя www.example.com?name=Jay&pws=kapoor? Попробуйте добавить прямой слеш: www.example.com/?name=Jay&pws=kapoor. Это может помочь избежать ошибки 404.

Johansson Johansson
6 июн. 2017 г. 11:39:11

Если вы получаете ошибку 404, значит, запрос на сервер отправляется. Но, по-видимому, это недопустимый запрос.

cjbj cjbj
6 июн. 2017 г. 11:54:13

мой вопрос был о том, как привязать php-файл.. я имею в виду, какой url я должен указать в ajax url

Jay Kapoor Jay Kapoor
6 июн. 2017 г. 12:36:14
Все ответы на вопрос 1
4

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');
6 июн. 2017 г. 12:34:28
Комментарии

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

Bikash Waiba Bikash Waiba
6 июн. 2017 г. 14:26:10

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

Bikash Waiba Bikash Waiba
6 июн. 2017 г. 14:45:19

Можете подсказать, как сравнить хешированный пароль WordPress?

Jay Kapoor Jay Kapoor
7 июн. 2017 г. 07:06:49

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

Bikash Waiba Bikash Waiba
7 июн. 2017 г. 08:25:20