jquery $。当主页面中的等待函数无法工作时

时间:2018-05-30 17:02:10

标签: c# jquery asp.net .when

当我在使用母版页的网页表单中使用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) {

                        }
              })
         }
   })
}

结果是主页功能未完成时web功能正在运行 请帮忙,非常感谢你

1 个答案:

答案 0 :(得分:1)

您已关闭,但whenthendone功能依赖于承诺。您不会在代码中返回任何承诺,因此它只是直接运行。

首先,您需要在主页的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调用完成,这将解决这个承诺。