我在检索多个列表时遇到了问题。有没有办法让我可以使用JSOM在不同的列表中发出多个请求?谢谢。
答案 0 :(得分:0)
老问题,但我想为将来的读者发布这个答案。
只需获取所有列表,然后依次加载它们:
var ctx = SP.ClientContext.get_current();
// assuming you're working with the appweb
var list1 = ctx.get_web().get_lists().getByTitle("list1");
var list2 = ctx.get_web().get_lists().getByTitle("list2");
var list3 = ctx.get_web().get_lists().getByTitle("list3");
ctx.load(list1);
ctx.load(list2);
ctx.load(list3); // multiple loads required
ctx.executeQueryAsync( // one call to the server
function(){
// do something with the lists
},
function(){
// fail
});
使用SharePoint的JSOM API时,使用jQuery的承诺模式也是一个好主意,如下所示:
// extending the jQuery namespace for convenience
// if this is a bad idea performance wise or something
// I would like to hear from someone :)
$.extend({
execQAsync: function(ctx){
var dfd = $.Deferred();
ctx.executeQueryAsync(
function(sender,args){
dfd.resolve();
},
function(sender, args){
dfd.reject();
});
return dfd.Promise();
}
});
然后你可以这样做:
$.execQAsync(ctx)
.done(function(){
// do something when the promise resolves
})
.fail(function(){arguments[1].get_message() });
请参阅Optimal/preferred way to call 'SP.ClientContext.executeQueryAsync' in SharePoint
P.S Doublecheck lettercasings等,我把这一切写成了小提琴。