一旦jquery.each完成运行一些异步功能,请执行一些操作

时间:2019-03-28 15:32:17

标签: javascript jquery html asynchronous

我有一个Jquery.each函数,该函数遍历Company对象的数组,对于每个Company对象,异步Jquery.getJSON函数用于返回Project对象的数组。如下所示,所有这些项目都添加到了数组p中。异步调用结束后,我想操作此数组,但是我不确定如何执行此操作。

我已经研究过使用回调函数和Promise,但是我对javascript或jquery不太熟悉,无法使任何东西正常工作。

var p = new Array();

$.each(selectedCompany, function (index, company) {
    $.getJSON('@Url.Action("GetProjects", "Home", new { })', { CompanyID: company }, function (projects) {
        for (i = 0; i < projects.length; i++) {
            p.push(projects[i].Text);
        };

    });
});
document.getElementById("test").innerHTML = p; //display on html page as test


//Do something with p here

我尝试使用“ document.getElementById(” test“)。innerHTML = p;”在网页上显示该数组。测试它是否被填充。 (输出应该是[object Object],[object Object],[object Object] ...等)。但是正如我预期的那样,由于异步调用尚未完成,所以这不会发生(我相信吗?)。任何帮助,将不胜感激。

编辑

我尝试实现jQuery.when,如下面的Rory McCrossan所建议的那样,但是这似乎仍然行不通。也许我执行错了?在下面的代码中,作为测试,我更改了两个html元素以检查p的状态。在test1中显示对象,例如1:[对象对象],[对象对象] ...等等,但是在test2中什么也不显示。

var p = new Array();
var test = new Array();

$.each(selectedCompany, function (index, company) {

    var a = $.getJSON('@Url.Action("GetProjects", "Home", new { })', { CompanyID: company }, function (projects) {
        for (i = 0; i < projects.length; i++) {
            p.push(projects[i]);
        };
        document.getElementById("test").innerHTML = "1: " + p;
    });

    test.push(a);
});

$.when($, test).done(function () {
    document.getElementById("test1").innerHTML = "2: " + p;
});

0 个答案:

没有答案