繁体   English   中英

处理JavaScript中的异步调用

[英]Dealing with Async calls in Javascript

我在这里遇到了小麻烦。 在我的document.ready函数中,我定义了一个对象,并且该对象正由三个不同的ajax调用填充(在document.ready内部)。 现在我想做一个

 console.log(myObject);

仅当3个异步调用已完全执行时。 请提出一种方法。

使用我建议您创建一个这样的函数:

function onAllInformationIsReady() {
        console.log(myObject);
    }

function isAllInformationReady() {
    // verify here if you have all the information
}

并且您在ajax调用中执行了类似的操作(我不假设您在此处使用jQuery,请替换为ajax调用方法)

$.ajax({
    type: "POST",
    url: "some.php",
    data: "...n",
    success: function(msg){

     if(isAllInformationReady())
        onAllInformationIsReady();

    }
});

顺便说一句,如果您使用的是jQuery,则可以进行如下所示的同步ajax调用:

$.ajax({
        type: "POST",
        url: "some.php",
        data: "...n",
        async: false,
        success: function(msg){

        }
    });

尝试使用jQuery 1.5的新“ 延迟 ”对象:

var j1 = $.ajax(...);
var j2 = $.ajax(...);
var j3 = $.ajax(...);

j1.success(function(data) {
    // do something with data
});

j2.success(function(data) {
    // do something with data
});

j3.success(function(data) {
    // do something with data
});

$.when(j1, j2, j3).done(function() {
    console.log(myObject);
});

这三个.success()函数将被异步调用并将填充myObject ,然后,一旦所有三个AJAX请求均已完成, done函数将仅由$.when()调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM