@k0rabI

AJAX не работает. В чем причина?

В AJAX новичок. Пытаюсь сделать форму регистрации. Для этого хочу сделать проверку на повторность логина.

Когда ввожу что либо в #login_r то ничего не происходит. Вообще...

Собственно вот часть формы, и сам скрипт.

<form action="" method="POST" id="form_reg">
	<div class="form-group has-feedback">
		<div class="input-group">
		        <span class="input-group-addon icon"><i class="glyphicon glyphicon glyphicon-user"></i></span> 
			<input type="login" class="form-control login_r" id="login_r" placeholder="Kot" name="login_reg" required="required">
			<span class="glyphicon form-control-feedback"></span>
		</div>
		<span id="message_log"></span>
...</form>

$(function() {
	$('#login_r').keyup(function(){
 		$.ajax({
			type: 	'POST',
			url: 	'reg.php',
			data: 	$('#form_reg').serialize(),
			success:function(msg){
				if(msg == 'y'){
					alert('y');
				$('#message_log').html('<font>Этот логин можно использовать.</font>');
				}else if(msg == 'n'){
					alert('n');
					$('#message_log').html('<font>Этот логин уже занят.</font>');
				}
			},
			error: function(msg) {
      			alert('error');
      		       }
	      });
        }); 
});


А так же сам обработчик:
<?php
$db_host = "127.0.0.1";
$db_user = "root";
$db_password = "";
$db_table = "client";

$db = mysql_connect($db_host,$db_user,$db_password) OR DIE ("No connection");
mysql_select_db("KPMagZap", $db);

if(isset($_POST["login_reg"])){ 

		$login=htmlspecialchars($_POST['login_reg']); 
		
		$query=mysql_query("SELECT * FROM client WHERE log='".$login."'");
		$rowcat=mysql_fetch_array($query); 
		$numrows=mysql_num_rows($query); 

		if($numrows == 0) {
					echo "yes";
					}
					else{
					echo "no";
				}  	 
		} 
?>


Немного изменил код
$(function() {
		$('#login_r').on('keyup', function(){
			console.log('пошел процесс!');
 			$.ajax({
				type: 	'POST',
				url: 	'reg.php',
				data: 	$('#form_reg').serialize(),
				success:function(msg){
					if(msg == 'yes'){
						$('.message_log').html('<font color="green">Этот логин можно использовать.</font>');
					}else if(msg == 'no'){
						$('.message_log').html('<font color="green">Этот логин уже занят.</font>');
					} else {
      					console.log(msg);
      				}
				},
				error: function(msg) {
      			alert('error');
      		}
	   });
    }); 
});

Теперь выводит console.log(msg);. То есть пропускает весь цикл до последнего else.
0c149d34d9ab66788282ab4bd7148e9e.png

Есть предположение, что ругается на эти пробелы. Как пофиксить можно?
53adeaadac5cc070938a778f3187052f.png
  • Вопрос задан
  • 421 просмотр
Решения вопроса 1
@k0rabI Автор вопроса
Решил. Как и сказал проблема была в пробеле в конце... Не знаю откуда он взялся. Скопировал код, пересоздал файл, и вставил по новой и вуаля - в се заработало как часы... )
Всем спасибо за участие )
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
-1) кто такой input type="login"???? text знаю, password знаю, login шо за зверь?
0) проверить, подключен ли JQ
1) биндить евент по загрузке, и правильнее использовать on, то есть:
$(document).ready(function () {
    $('#login_r').on('keyup', function(){
        console.log('пошел процесс!');
        ...
        console.log(msg);
    })
}

2) Использовать console.log(), сначала в самом начале функции обработчика жс, чтобы убедиться что бинд вообще работает, далее, если все работает, выводить ключевые переменные на точках ветвления/изменения параметров. В конце вывести что пришло аяксом.
3) как и советовали, для начала и для отладки, уберите все и оставьте только вывод.
4) mysql_* функции являются устаревшими, используйте PDO(рекомендуется) или mysqli_*.

UPD:
Теперь выводит alert('error');. То есть пропускает весь цикл до последнего else.

Для начала замените алерт на вывод в консоль, далее - выводите не бесполезный error, а данные которые пришли, нахрена вам этот еггор? По уму, оперировать надо цифрой а не буквой, то есть отдавать 0 или 1.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы