У меня есть формы на сайте, которые обрабатываются 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();
}
});
}
});