如何在sharepoint中使用JSOM获取多个列表?

时间:2015-03-12 06:12:30

标签: sharepoint

我在检索多个列表时遇到了问题。有没有办法让我可以使用JSOM在不同的列表中发出多个请求?谢谢。

1 个答案:

答案 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等,我把这一切写成了小提琴。