Как проверить существование email через jQuery keyup()?

17 окт. 2012 г., 14:17:29
Просмотры: 17.9K
Голосов: 1

Я настроил функцию задержки 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, похоже, что это невозможно сделать напрямую. Кто-нибудь может подтвердить или предложить решение?

Спасибо

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

Поскольку событие keyup срабатывает каждый раз при отпускании клавиши на клавиатуре, я бы рекомендовал использовать событие blur, которое возникает только при переходе пользователя к следующему полю. Вы можете привязать это событие к AJAX-запросу, который будет проверять существование email-адреса.

nvwd nvwd
17 окт. 2012 г. 14:36:46

Это не специфично для WordPress.

Joseph Leedy Joseph Leedy
17 окт. 2012 г. 15:13:22

Возможно, не строго, но изначально я планировал использовать <?php if ( email_exists($email) ) { . . . } ?>, что является специфичным для WordPress. Так что, вероятно, мой вопрос можно обобщить: могу ли я использовать jQuery/JSON/AJAX вместе с if ( email_exists($email).

zilj zilj
17 окт. 2012 г. 15:52:14
Все ответы на вопрос 1
6

Я бы использовал 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);

Надеюсь, это поможет!

17 окт. 2012 г. 14:34:24
Комментарии

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

zilj zilj
17 окт. 2012 г. 15:55:00

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

zilj zilj
17 окт. 2012 г. 16:14:23

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

zilj zilj
17 окт. 2012 г. 16:23:42

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

zilj zilj
17 окт. 2012 г. 17:09:07

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

Что касается серверной ошибки, которую вы получаете на PHP-странице, можете ли вы предоставить ссылку? Можете ли вы показать код внутри функции email_exists?

Mateusz Michalik Mateusz Michalik
18 окт. 2012 г. 04:48:22

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

zilj zilj
18 окт. 2012 г. 11:44:51
Показать остальные 1 комментариев