Не удалось получить форму для отправки после успешной проверки AJAX с помощью PHP и прототипа - PullRequest
0 голосов
/ 20 мая 2011

У меня есть формы на сайте, которые обрабатываются PHP, включая проверку.Обычно, если есть ошибки, пользователь возвращается в форму с соответствующими сообщениями об ошибках.Для пользователей с включенным javascript, я пытаюсь написать javascript с Prototype, который использует AJAX для выполнения той же проверки PHP (чтобы избежать дублирования кода) и отображает сообщения об ошибках без фактической отправки формы и ожидания ее перезагрузки.

Скрипт очень хорошо работает при получении ошибок через AJAX и их отображении.Но, когда нет ошибок, я не могу получить форму для отправки и перейти к следующей странице.Я работал с Event.stopObserving, но он просто перезагружает страницу (которая не является URL-адресом действия формы, форма отправляется на страницу, отличную от самой формы, поэтому сервер не отправляет браузер обратно).Я не очень хорош с javascript и Prototype, поэтому я, вероятно, упускаю что-то очевидное, но любая помощь будет принята с благодарностью.Во всяком случае, вот мой код:

document.observe("dom:loaded", function() {
    $$('form')[0].observe('submit', validate);

    function validate(event) {
        event.stop();
        // remove any existing error messages
        var curErrors = $$('ul.error');
        for( i=0, im=curErrors.length; i<im; i++ ) curErrors[i].remove();

        $$('form')[0].request({
            parameters: { 'js' : 1 },
            requestHeaders: {Accept: 'application/json'},
            onSuccess: function(req) { 
                var errors = req.responseText;
                if( errors == '[]' ) {
                    // no errors, submit form to server
                    $$('form')[0].stopObserving('submit', validate);
                    $$('form')[0].submit();
                } else {
                    // have errors, display error messages
                    var errors = errors.evalJSON(true);
                    for( var error in errors ) {
                        var errorMsg = '<ul class="error"><li>' + errors[error] + '</li></ul>';
                        var input = $$('[name="'+error+'"]')[0];
                        // display error message next to form field
                        . . .
                    }
                }
            },
            onFailure: function() {
                // can't validate here, let server do it
                $$('form')[0].stopObserving('submit', validate);
                $$('form')[0].submit();
            }
        });
    }
});

1 Ответ

0 голосов
/ 20 мая 2011

Не вызывайте event.stop() непосредственно в вашем методе validate - обработчик события будет происходить раньше, чем событие, а это значит, что метод validate будет запускаться до формы. Просто переместите эту строку в ветвь оператора if относительно ошибки проверки, и она должна работать нормально. http://www.prototypejs.org/api/event/stop

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...