Jquery 如何使用延迟对象从一个api调用到另一个api调用获取数据?
我必须进行两个api调用-租户和用户。租户api返回所有现有租户的详细信息,用户api将返回特定租户中的所有用户。我需要在第一次函数调用后将租户ID与其详细信息进行映射。我必须使用这些键值作为第二个api调用的参数(它接受租户ID(整数))。在第二个api调用完成后,我必须为用户创建另一个映射,租户ID作为键,用户详细信息作为值Jquery 如何使用延迟对象从一个api调用到另一个api调用获取数据?,jquery,ajax,kendo-grid,jquery-deferred,Jquery,Ajax,Kendo Grid,Jquery Deferred,我必须进行两个api调用-租户和用户。租户api返回所有现有租户的详细信息,用户api将返回特定租户中的所有用户。我需要在第一次函数调用后将租户ID与其详细信息进行映射。我必须使用这些键值作为第二个api调用的参数(它接受租户ID(整数))。在第二个api调用完成后,我必须为用户创建另一个映射,租户ID作为键,用户详细信息作为值 var tenants = {}; var users = {}; function func1() {
var tenants = {};
var users = {};
function func1() {
$.ajax({
dataType: 'json',
url: crudUrl("tenants"),
success: function (response) {
response.forEach(function (item) {
var TTId = item.Id.toString();
if (!("key" in tenants)) {
tenants[TTId] = item;
}
})
}
});
}
function func2(key) {
return $.ajax({
dataType: 'json',
url: crudUrl("tenants/{tenantId}/users"),
data: {
tenantId: key
},
success: function (response) {
var detail = [];
var TTId = key;
response.forEach(function (item) {
var uid = {}
uid.Id = item.Id;
uid.Name = item.Name;
detail.push(uid);
})
users[TTId] = detail;
}
});
}
$.when(func1()).then(function () {
for (var key of Object.keys(tenants)) {
func2(parseInt(key));
}
});
上述方法可以工作,但网络负载过大,因为它必须在func2中对从func1获得的每个键进行多个ajax调用。我很确定这也可以使用延迟对象来完成,但我不知道如何使用它。我是新手,希望您能提供帮助。您能更改API吗?这似乎是一种加载所有数据的特别低效的方法。您甚至需要一次加载所有数据吗?通常是这样做的,所以你加载租户列表,当用户选择一个租户时,你只加载该租户的用户列表,而不是预先加载所有内容。实际上我必须使用这两个映射,这样我就可以更改剑道网格的行模板数据了。这是否会阻止您添加另一个API调用,一次加载所有数据?您没有提到服务器端技术,因此您可能还可以在初始渲染中预先加载所有技术。我从来没有提到过改变地图,只是改变了地图的填充方式。你好像有点问题。