Замена для асинхронного: ложь в $.ajax
У меня есть форма, которая отправляет данные в базу данных, а затем отправляется в Google Docs. Я использую JQuery Ajax для достижения этой цели. JavaScript:
var name ="a";
var company = "b";
var phone = "1";
...
$.ajax({
async: false,
url: "view/templates/includes/abc.php",
//type: 'POST',
//timeout: 10000,
data: {
"name": name,
"company": company,
"phone": phone,
"email": email,
"comments": comments
},
success: function(data) {
//called when successful
alert(data);
//alert('success');
$('#php-code').html(data);
},
error: function(e) {
// alert(e.message);
//called when there is an error
//console.log(e.message);
}
});
return true;
}
В abc.php мой код для вставки данных в БД.
Теперь проблема в том, что я не хочу использовать async: false, так как я читаю, его никогда не следует использовать, потому что это может привести к зависанию браузера и разрушению цели использования ajax. Однако, если я не использую async: false, форма отправляется до того, как приходит мой ajax-ответ, поэтому она всегда переходит к функции ошибки.
Что я мог сделать, чтобы не использовать async: false?
1 ответ
Вы можете вызвать функцию ajax при отправке.
Вы можете прекратить отправку формы на вашем мероприятии (может быть нажатие кнопки).
А в методе успеха ajax явно отправьте форму.
(может быть сделано с помощью jQuery - $('#id_of_form').submit()
)
EX. можете следовать инструкциям,
$('#id_button_submit').click(function(event){
// this will prevent form to be submitted
event.preventDefault();
// call the function of ajax
serviceCall();
});
В методе успеха AJAX
success: function(data) {
$('#id_of_form').submit();
// rest of your code
},
Или плагин JQuery http://malsup.com/jquery/form/ может быть полезен для вас