Как я могу использовать $ jQuery .ajax, функция, чтобы остановиться или позволить форму отправляют?

$('#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", я хочу позволить его, если данные, содержавшиеся в "результате", говорят. Как я могу выполнить это?

7
задан Shamoon 5 March 2010 в 00:54
поделиться

4 ответа

Вы можете сделать это так:

$.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!');
    }
});

Поскольку вы посылаете сообщения назад и уходите, это просто отвязывает этот обработчик в случае успеха и позволяет сабмиту произойти нормально при его вызове, так что код не запускается и не проверяется снова, он просто сабмитится.

3
ответ дан 7 December 2019 в 12:18
поделиться
    success: function(result) {
        ...
        document.forms.post_form.submit();
    }
0
ответ дан 7 December 2019 в 12:18
поделиться

Я бы предложил всегда возвращать 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 будет выполняться асинхронно).

2
ответ дан 7 December 2019 в 12:18
поделиться

Я не уверен, что это сработает для вашей проблемы, но что если вы сделали запрос 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;
    });
});
0
ответ дан 7 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: