$('#post_form').submit(function() {
$("#ajax_bar_loader").show();
$.ajax({
url: 'add.html',
data: $('#post_form').serialize(),
dataType: 'json',
type: 'post',
success: function( result ) {
retVal = formCheck( result );
}
});
return false;
});
Это - то, на что похож мой код, и вместо "возвращают false", я хочу позволить его, если данные, содержавшиеся в "результате", говорят. Как я могу выполнить это?
Вы можете сделать это так:
$.ajax({
url: 'add.html',
data: $('#post_form').serialize(),
dataType: 'json',
type: 'post',
success: function( result ) {
retVal = formCheck( result );
if(retVal)
$('#post_form').unbind('submit').submit();
else
alert('Error with your form! Oh crap!');
}
});
Поскольку вы посылаете сообщения назад и уходите, это просто отвязывает этот обработчик в случае успеха и позволяет сабмиту произойти нормально при его вызове, так что код не запускается и не проверяется снова, он просто сабмитится.
success: function(result) { ... document.forms.post_form.submit(); }
Я бы предложил всегда возвращать 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
будет выполняться асинхронно).
Я не уверен, что это сработает для вашей проблемы, но что если вы сделали запрос ajax синхронным?
Я заставил этот фиктивный код "работать", он запускает запрос ajax, а затем устанавливает логическое значение. Затем форма возвращает истину или ложь в зависимости от логического:
$(document).ready(function() {
$('form').submit(function() {
var should_return = false;
$.ajax({
async: false,
url: 'test.php',
type: 'post',
success: function() {
// Do some type of check
should_return = true;
}
});
return should_return;
});
});