jquery $. когда не работает функция ожидания на главной странице

У меня есть некоторые проблемы, когда я использую функцию jquery.when в веб-форме, используя главную страницу

Это мой код в веб-форме с использованием главной страницы

$(document).ready(function(){
  $.when(masterPageFunction()).done(function(){
     webFormFunction();
  });
})

И это моя главная страница

function masterPageFunction() {
   //In this function i call 2 ajax like this
    $.ajax({
         type: "POST",
         url: "/api/master/xxx/",
         data: JSON.stringify(obj),
         contentType: "application/json; charset=utf-8",
         dataType: "json",
         success: function (response) {
               $.ajax({
                        type: "POST",
                        url: "/api/master/xxx2/",
                        data: JSON.stringify(obj),
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (response) {

                        }
              })
         }
   })
}

результат - веб-функция запущена, когда функция главной страницы не выполнена, пожалуйста, помогите, большое спасибо

1 ответ

Ты близко, но when, then а также done функции полагаются на обещания. Вы не возвращаете никаких обещаний в своем коде, поэтому он просто выполняется.

Во-первых, вам нужно получить результат обещания после его завершения в done функция на вашей главной странице. Мы сделаем это, добавив response параметр для обратного вызова, а затем передать его webFormFunction,

$(document).ready(function(){
  $.when(masterPageFunction()).done(function(response){
     webFormFunction(response);
  });
})

Далее нам нужно добавить обещание masterPageFunction и верни это. Вы разрешаете обещание ответом, который хотите отправить обратно done функция на вашей главной странице. Вот так:

function masterPageFunction() {

    // Create the promise
    var deferred = $.Deferred();

    //In this function i call 2 ajax like this
    $.ajax({
        type: "POST",
        url: "/api/master/xxx/",
        data: JSON.stringify(obj),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {
            $.ajax({
                type: "POST",
                url: "/api/master/xxx2/",
                data: JSON.stringify(obj),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (response) {
                    // Resolve the promise with the response from $.ajax
                    deferred.resolve(response);
                }
            });
        }
    });

    // Return the promise (It hasn't been resolved yet!)
    return deferred.promise();
}       

В этом случае, webFormFunction не будет вызван, пока не завершится второй вызов ajax, который разрешает обещание.

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