У меня есть форма, в которой я выполняю некоторую обработку ошибок AJAX перед отправкой формы, просто чтобы улучшить взаимодействие с пользователем. Моя проблема в том, что переменная $user_password, кажется, остается пустой на протяжении всего процесса, поэтому обработка ошибок не имеет значения.
В следующем коде первая функция клавиатуры должна проверить, длиннее ли пароль, чем минимальная длина, а вторая - проверить, совпадают ли пароли:
$(document).ready(function() {
$("input[name=user_password]").keyup(function(){
var user_password = $("input[name=user_password]").val();
//data to server...
$.post("../server/hub.php", {
//POST name and variable...
check_password: user_password
//places fetched information...
}, function(data, status) {
$("#user_password").html(data);
});
});
});
$(document).ready(function() {
$("input[name=user_password_2]").keyup(function(){
var user_password = $("input[name=user_password]").val();
var user_password_2 = $("input[name=user_password_2]").val();
//data to server...
$.post("../server/hub.php", {
//POST name and variable...
password_match: user_password,
password_match_2: user_password_2
//places fetched information...
}, function(data, status) {
$("#user_password_2").html(data);
});
});
});
Переменные перенаправляются в файл php, где фактически выполняется обработка ошибок:
if (isset($_POST['check_password'])) {
$user_password = $_POST['check_password'];
echo $user_password;
if ($user_password == "") {
echo "";
} elseif (strlen($user_password) < 6) {
echo "Password must contain at least six characters!";
} else {
echo "You are good to go!";
}
}
if (isset($_POST['password_match'])) {
$user_password = $_POST['password_match'];
$user_password_2 = $_POST['password_match_2'];
if ($user_password_2 == "") {
echo "";
} elseif ($user_password !== $user_password_2) {
echo "Sorry, passwords do not match!";
} else {
echo "You are good to go!";
}
}
Хотя данные, возвращаемые в html-файл, остаются пустыми, повторение $user_password не дает результата.
Вот сегмент html:
<form action = "../server/register.php" method = "POST">
<div class = "input_table">
<table>
<thead>
<tr>
<th><h1>Register to LIMS</h1></th>
</tr>
</thead>
<tbody>
<tr>
<td><input type = "password" name = "user_password" placeholder = "Select Password"><p id = "user_password"></p></td>
</tr>
<tr>
<td><input type = "password" name = "user_password_2" placeholder = "Repeat Password"><p id = "user_password_2"></p></td>
</tr>
</tbody>
</table>
</div>
<button type = "submit" name = "user_register" class = "button_1">Register</button>
<button type = "button" class = "button_3">Cancel</button>
</form>
Кто-нибудь может объяснить, почему это происходит?
Консоль пуста, отображается только подсказка.
Глупый вопрос, вы уверены, что в вашем коде есть скрипт библиотеки jquery.
Глупый комментарий, конечно же!
Почему вы используете двойной $ (document) .ready (function ()?
Это был просто способ устранения неполадок, но в любом случае у меня возникает та же проблема.
Вы отправляете данные каждый раз, когда нажимаете клавишу?
Пожалуйста, поместите exit после завершения вашего процесса в файл php.
Да, есть и другие части кода ajax, которые постоянно проверяют, используется ли имя пользователя или адрес электронной почты, и они работают. Я исключил их для простоты.
Я думаю, вам нужно отправлять данные только тогда, когда вы нажимаете кнопку отправки
@ Sfili_81, но почему другие переменные и запросы работают, а не $user_password?
Какую версию jquery вы используете?






Мне удалось заставить ваш код работать так, как вы его написали.
Я создал пустую страницу для html под названием test.php:
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form action = "../server/register.php" method = "POST">
<div class = "input_table">
<table>
<thead>
<tr>
<th><h1>Register to LIMS</h1></th>
</tr>
</thead>
<tbody>
<tr>
<td><input type = "password" name = "user_password" placeholder = "Select Password"><p id = "user_password"></p></td>
</tr>
<tr>
<td><input type = "password" name = "user_password_2" placeholder = "Repeat Password"><p id = "user_password_2"></p></td>
</tr>
</tbody>
</table>
</div>
<button type = "submit" name = "user_register" class = "button_1">Register</button>
<button type = "button" class = "button_3">Cancel</button>
</form>
<script>
$(document).ready(function() {
$("input[name=user_password]").keyup(function(){
var user_password = $("input[name=user_password]").val();
//console.info('password 1 key up'); //Check for key up.. It works
//data to server...
$.post("hub.php", {
//POST name and variable...
check_password: user_password
//places fetched information...
}, function(data, status) {
console.info(data); //Check for your data.
$("#user_password").html(data); //Data was displayed in div.
});
});
});
$(document).ready(function() {
$("input[name=user_password_2]").keyup(function(){
var user_password = $("input[name=user_password]").val();
var user_password_2 = $("input[name=user_password_2]").val();
//data to server...
$.post("hub.php", {
//POST name and variable...
password_match: user_password,
password_match_2: user_password_2
//places fetched information...
}, function(data, status) {
$("#user_password_2").html(data);
});
});
});
</script>
Обратите внимание, что я использую hub.php в качестве URL-адреса для AJAX.
Другое дело, что я использовал JQuery 3.1.1 и загрузил библиотеку перед формой.
Я также обернул ваш код jquery в теги <script>.
И страница hub.php, которую я поместил в ту же папку, что и test.php:
<?php
echo 'I made it.'; //Test to see if you landed on the page.
if (isset($_POST['check_password'])) {
$user_password = $_POST['check_password'];
echo $user_password;
if ($user_password == "") {
echo "";
} elseif (strlen($user_password) < 6) {
echo "Password must contain at least six characters!";
} else {
echo "You are good to go!";
}
}
if (isset($_POST['password_match'])) {
$user_password = $_POST['password_match'];
$user_password_2 = $_POST['password_match_2'];
if ($user_password_2 == "") {
echo "";
} elseif ($user_password !== $user_password_2) {
echo "Sorry, passwords do not match!";
} else {
echo "You are good to go!";
}
}
?>
Я бы обязательно проверил ваши пути. Если вы не видите ответа в консоли, значит, ваш AJAX не направлен в правильный каталог.
Я проверил это, и он работает.
roelofco - Поскольку вы не получаете ошибку 404, похоже, что нет проблем с путем к файлу PHP. Пара вещей, которые вы можете попробовать.
Пожалуйста, попробуйте добавить следующий код в начало hub.php
<?php
echo "Entering the Ajax File";
var_dump($_POST);
$("input[name=user_password]").val(); - это не лучший способ получить ценность. В документе HTML может быть несколько элементов / тегов с одинаковым именем. Таким образом, вы можете либо изменить атрибут name в html на id и соответственно изменить jquery, либо использовать $("input[name=user_password]").eq(0).val(); - этим мы теперь говорим JS получить первый элемент с именем user_password.
Обратите внимание, что вызовы Ajax при нажатии клавиш очень затратны. Попробуйте сделать это в форме submit. Проверка на стороне клиента выполняется во время нажатия клавиши.
Использование нескольких событий готовности DOM замедлит работу сайта. Всегда идеально хранить весь код в одной готовой функции DOM.
сообщение jquery имеет методы отказа и всегда обратного вызова. Попробуйте использовать это, чтобы получить ошибки. В вашем случае это будет так.
$.post("../server/hub.php", {
//POST name and variable...
password_match: user_password,
password_match_2: user_password_2
//places fetched information...
}, function(data, status) {
$("#user_password_2").html(data);
}).fail(function() {
alert( "Some error" );
}).always(function() {
alert( "Ajax finished" );
});`
Итак, ответ на проблему довольно прост, но его очень легко упустить. Это снова показывает, почему хорошая практика кодирования необходима для написания успешного веб-сайта. Мне кажется, что в этом случае name=user_password был повторен где-то еще в коде, поэтому при вызове с использованием:
var user_password = $("input[name=user_password]").val();
он относился к вводу в другой части кода, а не к вводу, к которому я пытался применить код. Просто изменив name=user_password на name=user_password_1 в html-коде, а затем изменив код ajax:
$(document).ready(function() {
$("input[name=user_password_1]").keyup(function(){
var user_password_1 = $("input[name=user_password_1]").val();
//data to server...
$.post("../server/hub.php", {
//POST name and variable...
check_password: user_password_1
//places fetched information...
}, function(data, status) {
$("#user_password_1").html(data);
});
});
$("input[name=user_password_2]").keyup(function(){
var user_password_1 = $("input[name=user_password_1]").val();
var user_password_2 = $("input[name=user_password_2]").val();
//data to server...
$.post("../server/hub.php", {
//POST name and variable...
password_match_1: user_password_1,
password_match_2: user_password_2
//places fetched information...
}, function(data, status) {
$("#user_password_2").html(data);
});
});
});
Код работает отлично. Хотя, по моему мнению, это была идиотская ошибка, я все же считаю важным опубликовать ее в качестве ответа, чтобы другие люди могли извлечь выгоду из двойной проверки своего кода на наличие таких глупых ошибок, как эта.
Что вам показывает ваша консоль?