[英]How to merge results of two jQuery AJAX calls and use deferred/promise
我正在尝试合并两个jQuery AJAX调用的结果。 我在这里查看了其他类似的问题,但似乎没有一个帮助。 对于每个ajax调用(其中两个),我都成功调用了函数createStatusView,并将结果传递给它。 好的方面是,结果对于两个AJAX调用都有效。 坏消息是我的$ .when调用对res1和res2都返回未定义,然后将结果的未定义发送到我的createStatusView。 因此,我真的不想为两个AJAX调用(仅在$ .when时)都调用createStatusView。 任何建议将不胜感激。
function getSpecifiedList(listName, userId){
var url = SP.PageContextInfo.get_webServerRelativeUrl() + "/_vti_bin/listdata.svc/" + listName;
var url1 = url + "?$select=ParentOrg,ORG,URL,Site_Status&$inlinecount=allpages";
var call1 = $.ajax({
url: url1,
type: "GET",
headers:{"accept":"application/json;odata=verbose",
},
success: function(results){createStatusView(results, listName);},
error:function(error){
console.log("Error in getting List: " + listName);
$(_options.container).html("Error retrieving your " + listName + ". " +
SP.PageContextInfo.get_webServerRelativeUrl());
}
});
var url2 = url + "?$select=ParentOrg,ORG,URL,Site_Status&$inlinecount=allpages&$skiptoken=1000";
var call2 = $.ajax({
url: url2,
type: "GET",
headers:{"accept":"application/json;odata=verbose",
},
success: function(results){createStatusView(results, listName);},
error:function(error){
console.log("Error in getting List: " + listName);
$(_options.container).html("Error retrieving your " + listName + ". " +
SP.PageContextInfo.get_webServerRelativeUrl());
}
});
//the res1 and res2 come back undefined
//call1 and call2 are objects as shown in F12 debug
$.when(call1,call2).done(function(res1,res2){
var results = res1[0].d.results.concat(res2[0].d.results);
createStatusView(results,listName);
});
}
尝试在$ .when回调函数中添加一些对象检测。 它将使未定义的值不在列表中。
$.when(call1,call2).done(function(res1,res2){
var results = res1[0].d.results.concat(res2[0].d.results);
if (results) {
createStatusView(results,listName);
}
});
另一个例子:
$.when(call1,call2).done(function(res1,res2){
if (!res1 && !res2) return;
var results = res1[0].d.results.concat(res2[0].d.results);
if (results) {
createStatusView(results,listName);
}
});
与此相同:
$.when(call1,call2).done(function(res1,res2){
if (res1 && res2) {
var results = res1[0].d.results.concat(res2[0].d.results);
if (results) {
createStatusView(results,listName);
}
}
});
您是否尝试过将ajax调用移至单独的函数,然后从when调用那些函数?
function getSpecifiedList(listName, userId){
$.when(call1(listName),call2(listName)).then(function(res1,res2){
var results = res1[0].d.results.concat(res2[0].d.results);
createStatusView(results,listName);
});
}
function call1(listName){
var url = SP.PageContextInfo.get_webServerRelativeUrl() + "/_vti_bin/listdata.svc/" + listName;
var url1 = url + "?$select=ParentOrg,ORG,URL,Site_Status&$inlinecount=allpages";
return $.ajax({
url: url1,
type: "GET",
headers:{
"accept":"application/json;odata=verbose",
}
});
};
function call2(listName){
var url = SP.PageContextInfo.get_webServerRelativeUrl() + "/_vti_bin/listdata.svc/" + listName;
var url2 = url + "?$select=ParentOrg,ORG,URL,Site_Status&$inlinecount=allpages&$skiptoken=1000";
return $.ajax({
url: url2,
type: "GET",
headers:{
"accept":"application/json;odata=verbose",
}
});
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.