Подтвердить что ты не робот

Могу ли я предотвратитьDefault(); внутри обратного вызова ajax?

Я делаю некоторую проверку формы, и у меня возникают проблемы с тем, что я пытаюсь выполнить. Я хочу, чтобы иметь возможность проверить мой почтовый индекс на размытие поля, но также вызвать ту же функцию для проверки zip при отправке формы и предотвращения отправки формы, если почтовый индекс недействителен. Мой код (в общем) выглядит примерно так.

function validateZipCode(event){
    $.getJson(
        url,
        params,
        function(data){
            if(data.response === false){
                someError.show();
                event.preventDefault(); //stop the form from being submitted
            }    
        }
    );
}

$('#someForm').submit(function(event){
    validateZipCode(event);
});

$('#zipInput').blur(function(event){
    validateZipCode(event);
})

Я пробовал использовать методы, расположенные в этом jQuery, передать больше параметров в ответную запись, но я все еще не могу выполнить то, что мне нужно. Любая помощь приветствуется.

4b9b3361

Ответ 1

Нет, к тому моменту, когда будет вызван обратный вызов из события AJAX, событие будет уже запущено и форма отправлена. Один из способов добиться этого - отменить форму от отправки и затем отправить ее вручную, если она удовлетворяет требованиям из запроса AJAX.

Ответ 2

Вам необходимо предотвратить действие по умолчанию для события, прежде чем оно будет запущено и обработано браузером. $.getJson возвращает управление и позволяет сначала выполнить функцию validateZipCode, поэтому вам нужно сделать это:

function validateZipCode(event){
    event.preventDefault(); //stop the form from being submitted
    $.getJson(
        url,
        params,
        function(data){
            if(data.response === false){
                someError.show();
            }
        }
    );
}

$('#someForm').submit(function(event){
    validateZipCode(event);
});

$('#zipInput').blur(function(event){
    validateZipCode(event);
})

Ответ 3

Нет, без использования метода ajax() и установки async на false, вы ничего не можете вернуть из своего запроса ajax.

Лучшей идеей было бы всегда предубеждать дефолт по вашей подаче, а затем вручную отправить форму в обратном вызове ajax.