Я использую php и ajax для проверки, существует ли в моей базе данных электронная почта, вставленная в мою форму.
Я использую jquery для отправки значения электронной почты в мой php-файл и возврата сообщения, если оно найдено. Мой код работает нормально, но я хочу, чтобы при обнаружении электронного письма курсор был в фокусе на поле #usu_email, пока электронное письмо не будет изменено. После этого он должен позволить мне перейти к следующему полю.
Это код jquery, который я использую:
function getemail(value) {
var usumail = $("#usu_email").val();
$.ajax({
type: "POST",
url: "ajax_email.php",
data: "usu_email=" + usumail,
success: function(data, textStatus) {
if (data !== null) {
$("#eresult").html(data);
$("#usu_email").focus();
}
},
});
};
Моя проблема в том, что если в моей базе данных нет электронной почты, курсор продолжает фокусироваться на моем поле #usu_email и не позволяет мне перейти к следующему полю.
Я буду признателен за любую помощь по этой проблеме, потому что я очень мало знаю о jquery.
Первый … Ваше состояние if (data !== null)
всегда будет истинным, так как всегда будут предоставлены данные … Будь то пустая строка.
Единственный случай, когда не будет data
на Ajax ошибка … И условие даже не будет оцениваться, потому что success
обратный вызов не будет выполнен.
Далее я предполагаю, что ваш запрос Ajax запущен на $("#usu_email")
размытие … остальное, я не знаю, как вы добиваетесь «Не позволяет мне продолжать».
Измените его таким образом, чтобы сравнить ответ:
function getemail(value) {
var usumail = $("#usu_email").val();
$.ajax({
type: "POST",
url: "ajax_email.php",
data: "usu_email=" + usumail,
datatype: "json",
success: function(data) { // There is only one argument here.
// Display the result message
$("#eresult").html(data.message);
if (data.email_exist == "yes") {
$("#usu_email").focus();
}
if (data.email_exist == "no") {
// Something else to do in this case, like focussing the next field.
}
},
});
};
На стороне PHP вы должны предоставить ответ json. Это будет выглядеть примерно так:
<?php
// You have this variable to compare against the database
$email = $_POST[usu_email];
// You say it is working.
// ...
// Then, you certainly have a result... Say it's $found (true/false).
// Build an array of all the response param you want to send as a response.
if($found){
$result[email_exist] = "yes";
$result[message] = "The submitted email already exist.";
}else{
$result[email_exist] = "no";
$result[message] = "A success message about the email here.";
}
// Add this header to the returned document to make it a valid json that doesn't need to be parsed by the client-side.
header("Content-type:application/json");
// Encode the array as a json and print it. That's what is sent in data as an Ajax response.
echo json_encode($result);
?>
Будьте осторожны, чтобы не повторить что-либо еще. Даже не пробел или строка возврата.
Зависит от того, какой тип данных вы ожидаете (простой текстовый ответ или JSON), но сначала я бы начал заменять ваши if(data !== null)
с if(typeof data != "undefined" && data !== null && data != "")
потому что возвращенный ответ может быть просто пустым, а не NULL.
Если это не сработает, вам следует подумать о добавлении вашего php-кода в вопрос, чтобы мы могли точно определить, что он возвращает, если не найдено подходящего электронного письма.