我有一个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;
});