对不起,你们。我真的不想问这个问题;我保证,我已经经历了许多其他问题,这些问题看起来甚至与我的耐心允许相关。
遵循以下问题的代码:
我有以下内容:
var XHR = [];
//This parses some selections on a screen, which, in turn, informs the URL inside the loop.
$("#list > input:checkbox:checked").each(function(){
result = [];
var list = $(this).val();
XHR.push($.ajax({
type:'GET',
url:"https://a-place.com/subsite/webapp/_api/web/lists/getByTitle('"+list+"')/items?$select=" + select + "&$filter=" + filter + "&$expand=" + expand + "&$top=10000",
dataType: "json",
headers: {Accept:"application/json;odata=verbose"},
complete:function(data){}
}));
});
$.when(XHR).then(function(data){
console.log(data);
});
无论我做什么,我都只是在那里得到承诺。然后施工。我无法对它们做任何事情,试图访问responseJSON属性,其中所有实际对象都没有做任何事情。我已经尝试在完整的回调函数中添加一个return语句,这似乎不会改变实际被推入XHR数组的内容。
理想情况下,这应该从一个或多个与所选选项匹配的SharePoint列表中返回一堆列表项,并将匹配的项放入我可以处理的单个数组中。
修改
嗯。好的,根据建议,我试过了:
success:function(data){}
和
success:function(data){return data.d.results;}
无论我使用$ .when.then还是.done,控制台都没有真正改变。
提前致谢。
答案 0 :(得分:1)
您可以尝试在成功回调中收集所有结果,然后在'然后'中使用它。函数回调:
var results = [];
...
success: function(data){
results.push(data.d.results);
}
...
$.when(XHR).then(function(){
// Here you should have all results filled in
console.log(results);
});
答案 1 :(得分:0)
您对$.when
的使用不正确。 $.when
未实现Promise.all
,而是需要多个参数。幸运的是,这很容易解决。
$.when.apply($, XHR).then(...
答案 2 :(得分:-1)
您需要设置成功回调,而不是使用完整回调。 docs表示成功回调有一个数据参数,并且在成功和错误回调之后执行完整的回调。
我的代码中的示例:(使用json数据调用ApplyUpdate函数,然后将其应用于现有对象)
function doRefresh(repeat) {
if (nextTimeOut) clearTimeout(nextTimeOut);
j$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: baseUrl + "/WebService/Service.asmx/GetSummary",
data: "{}",
dataType: "json",
success: function (json) { ApplyUpdate(json.d, repeat); }
});
}
function ApplyUpdate(resp, repeat) {
goodObj.text(resp.GoodCount);
errObj.text(resp.BadCount);
if (repeat) nextTimeOut = setTimeout(autoRefresh, waitTime);
}