Я бы предложил всегда возвращать false
в конце обработчика событий, чтобы предотвратить нормальную отправку формы. В случае успешного обратного вызова на $.ajax
вы можете условно перенаправить на основе ответа от сервера:
$('#post_form').submit(function() {
$("#ajax_bar_loader").show();
$.ajax({
url: 'add.html',
data: $('#post_form').serialize(),
dataType: 'json',
type: 'post',
success: function( result ) {
if(result == 'something') {
alert("some error happened");
} else {
// assuming we're visiting the form's action
window.location.href = $(this).attr("action");
}
}
});
return false;
});
Неверно рассчитывать на то, что обратный вызов успеха сработает до завершения выполнения обработчиком отправки, поскольку код, следующий за вызовом $.ajax
, очень вероятно будет оценен до того, как будет выполнен успешный обратный вызов ($.ajax
будет выполняться асинхронно). *