jquery $. когда не работает функция ожидания на главной странице - PullRequest
0 голосов
/ 30 мая 2018

У меня есть некоторые проблемы, когда я использую функцию 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 Ответ

0 голосов
/ 01 июня 2018

Вы близки, но функции 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, что разрешает обещание.

...