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

JQuery продолжает выполнение другой функции ajax после того, как первый вызов функции ajax полностью завершен

У меня есть 2 вызова ajax в 2 разностных функциях. Я хочу использовать .click для вызова этих двух функций , Func1 вставляет данные в базу данных, затем func2 должен извлекать данные, поэтому мой вопрос заключается в том, как подождать, пока func1 полностью завершит, тогда он выполнит func2.

Я пробовал .delay(), он работает, но я думаю, что это глупое решение.

  $("#updateLocation").click(function(e){
      e.preventdefault;
        func1();
        func2();
      });
      return false;
    });

    function func1(){
      $.ajax({
        url:'',
      });
});

    function func2(){
      $.ajax({
        url:'',
      });
});
4b9b3361

Ответ 1

Три способа:

Вызвать func2 на успех func1:

    function func1() {
       $.ajax({ ... }).done(func2);
    }

Используйте API Deferred для вызова func2, когда funky завершает:

    e.preventDefault();
    $.when(func1).then(func2);

Сделайте func1 синхронным (не рекомендуется):

    function func1() {
       $.ajax({url: '', async: false});
    }

Ответ 2

Так как Ajax-вызовы асинхронны, приложение не будет приостанавливаться до тех пор, пока не будет завершен вызов ajax, и просто сразу начните следующий вызов.

JQuery предлагает обработчик, вызываемый при успешном вызове, а другой - при возникновении ошибки во время вызова.

$.ajax({
  url: 'ajax/test.html',
  success: function(data) {
    $('.result').html(data);
    alert('Load was performed.');
  },
  error :function(jqXHR, textStatus, errorThrown)
  {
     alert("something went wrong");
  }
});

Вы хотите вызвать свою вторую функцию AJAX из обработчика успеха.

Ответ 3

Переместить func2 внутри func1- > ajax- > succes callback

$("#updateLocation").click(function(e) {
    e.preventdefault;
    func1();
    //func2();
});
return false;
});

function func1() {
    $.ajax({
        url: '',
        success: function() { /* other stuff */
            func2();
        }
    });
});

function func2() {
    $.ajax({
        url: '',
    });
});

Ответ 4

Позвоните fun2 в успех func1

function func1(){
  $.ajax({
    url:'',

    success:function(){
         func2();
    }  
  })

Ответ 5

Вы можете установить для опции "асинхронный" значение false (для первого вызова ajax).

Это означает, что функция 2 будет вызвана после того, как функция 1 получит ответ, то есть завершит его выполнение.

    function func1(){
      $.ajax({
        url:'',
        async: false
      });
});

Ответ 6

вы также можете передать свою функцию как параметр:

var secondFunc = function (func) {

    //Do ajax req or smt
    func("answer", "params");

};
var firstFunc = function() {

    secondFunc(
        function (answerFromFunc2, paramsFromfunc2) {

            var a = answerFromFunc2;
            var b = paramsFromfunc2;

        }
    );

    //Do smt after the function request to the server is done
    var doSmt = "another func or variable";

};
firstFunc();