Замена для асинхронного: ложь в $.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/ может быть полезен для вас

Другие вопросы по тегам