Как проверить существование email через jQuery keyup()?
Я настроил функцию задержки jQuery keyup() для проверки email, вводимого в поле ввода.
При тестировании с alert('Клавиша нажата!');
всё работает корректно.
Но мне нужно, чтобы выводилось сообщение, например: 'Да, этот email зарегистрирован' ИЛИ 'Извините, этого email нет в нашей базе' без отправки запросов на сервер.
var delay = (function(){ var timer = 0; return function(callback, ms){ clearTimeout (timer); timer = setTimeout(callback, ms); }; })(); $('input').keyup(function() { delay(function(){ // проверить существование email и вывести результат // Можно ли здесь использовать PHP? // Может ли помочь ajax/json? }, 500 ); });
Я пытался выполнить проверку с помощью PHP, но этот код выполняется до jQuery, где хранится моя переменная с email.
После нескольких поисков в Google, похоже, что это невозможно сделать напрямую. Кто-нибудь может подтвердить или предложить решение?
Спасибо

Я бы использовал AJAX-запрос к PHP-скрипту, который выполняет проверку. Вот как это может выглядеть на стороне jQuery после загрузки документа:
// jQuery
$('#email-input').live('change', function() {
// AJAX-запрос
$.ajax({
url: "email_check.php",
data: {
'email' : $('#email-input').val()
},
dataType: 'json',
success: function(data) {
if(data.result) {
alert('Email существует!');
}
else {
alert('Email не существует!');
}
},
error: function(data){
// обработка ошибки
}
});
});
В приведенном выше примере ваш PHP-скрипт должен вернуть данные в формате JSON после проверки email. Например, ваш файл email_check.php может содержать следующий код:
// получаем email, переданный через AJAX
$email = $_GET['email'];
// выполняем проверку
if ( email_exists($email) ) {
$response->result = true;
}
else {
$response->result = false;
}
// выводим данные в формате JSON
echo json_encode($response);
Надеюсь, это поможет!

Я пришёл к выводу, что мне нужно использовать ajax, и это выглядит как хорошее решение. Сейчас попробую это реализовать.

Извините, я новичок в ajax. Должен ли jQuery находиться внутри моей функции keyup? Я добавил простую проверку на существование email в email_check.php, которая возвращает true или false. Это ведь неправильно? if ($email) {$response->result = true;} else {$response->result = false;}

Извините, я уже решил эту проблему благодаря вашему коду. Я забыл, что в url:
нужно учитывать URL темы.

Черт. К сожалению, в моем файле email_check.php я хотел выполнить if ( email_exists($email) )
, а затем вернуть значение true или false. Это вызывает ошибку сервера, и мне не удается заставить это работать. Я протестировал это на исходной странице, и там это работает. Почему же не работает в целевой php-странице?

Относительно ваших вопросов о том, где это использовать — просто используйте это внутри document ready, нет необходимости помещать это в вашу функцию keyup, эта функция, которую я написал, делает именно это (по сути, при изменении).
Что касается серверной ошибки, которую вы получаете на PHP-странице, можете ли вы предоставить ссылку? Можете ли вы показать код внутри функции email_exists?

Оказалось, что это не работало, потому что не было полной интеграции с WP. Мне посоветовали использовать wp_ajax и создать код в functions.php. http://wordpress.stackexchange.com/questions/69572/using-email-exists-wp-function-in-an-ajax-request
