Причина, по которой он отправляется, заключается в том, что вызовы AJAX по умолчанию асинхронны. Я бы не советовал делать это синхронно, потому что это заблокирует остальную часть выполнения javascript. Кроме того, вы возвращаете false
из success
метода $.ajax
. Это не находится в той же области видимости, что и родительская функция, и, следовательно, также не заставляет родительскую функцию возвращать false
. Фактически, ваша confirm_shop_code()
функция не возвращает что-либо , если code
не ложно, и именно поэтому ваша форма всегда отправляется, независимо от того, что происходит с вызовом AJAX.
Я бы порекомендовал использовать jQuery для привязки к событию отправки формы и просто отключить отправку формы с помощью preventDefault()
. Во-первых, просто добавьте атрибут id
в форму (например, "yourform"
) и сделайте что-то вроде:
$("form#yourform").submit(function(e) {
e.preventDefault();
var form = $(this);
var code=document.getElementById( "shop" ).value;
if(code) {
$.ajax({
type: 'post',
url: 'validations.php',
data: {
shop_code:code,
},
success: function (response) {
$( '#shop_data' ).html(response);
if(response=="OK") {
form.unbind('submit').submit()
}
}
});
} else {
$( '#shop_data' ).html("");
}
});