2013-07-09 33 views
1

我有3個庫,我想顯示庫項目名稱。如果我想顯示只有一個庫的項目,一切都可以,但是如果我正在查找兩個或多個庫的項目,它仍然只顯示一個庫的項目。我的代碼有什麼問題?使用Javascript顯示Sharepoint庫項目

<p id="AInfo">library A Items</p> 
    <p id="BInfo">library B Items</p> 
    <p id="CInfo">library C Items</p> 

    <script type="text/javascript"> 

     jQuery(document).ready(function(){ExecuteOrDelayUntilScriptLoaded(fill, "sp.js"); }); 

     var siteUrl = '/Example/test/'; 
     liblist = new Array("A", "B", "C"); //list of the libraries 
     var i=0; 
     var lib; 

     function fill(){ 
      while (i<3){ 
       lib = liblist[i]; 
       alert(lib); 
       retrieveListItemsInclude(); 
       i++; 
      } 
     } 


     function retrieveListItemsInclude() { 


      var clientContext = new SP.ClientContext(siteUrl); 
      var oList = clientContext.get_web().get_lists().getByTitle(lib); 

      var camlQuery = new SP.CamlQuery(); 
      camlQuery.set_viewXml('<View><RowLimit>100</RowLimit></View>'); 
      this.collListItem = oList.getItems(camlQuery); 

      clientContext.load(collListItem, 'Include(Id, DisplayName, HasUniqueRoleAssignments)'); 

      clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed)); 
     } 


      function onQuerySucceeded(sender, args) { 
       var listItemInfo = ''; 
       var listItemEnumerator = collListItem.getEnumerator();    

       while (listItemEnumerator.moveNext()) { 
        var oListItem = listItemEnumerator.get_current(); 
        listItemInfo += oListItem.get_displayName()+ '<br>'; 
       } 

       var x = listItemInfo.toString(); 
       document.getElementById(lib+"Info").innerHTML = x; 
     } 


     function onQueryFailed(sender, args) { 

      var x = 'Request failed. ' + args.get_message() + '\n' + args.get_stackTrace(); 
      document.getElementById(lib+"Info").innerHTML = x; 
     } 

    </script> 

回答

0

我認爲你需要等待第一個請求做第二個前完成。 類似的東西(但代碼髒,你應該避免全局變量...)

<p id="AInfo">library A Items</p> 
<p id="BInfo">library B Items</p> 
<p id="CInfo">library C Items</p> 

<script type="text/javascript"> 

    jQuery(document).ready(function(){ExecuteOrDelayUntilScriptLoaded(fill, "sp.js"); }); 

    var siteUrl = '/Example/test/'; 
    liblist = new Array("A", "B", "C"); //list of the libraries 
    var i=0; 
    var lib = liblist[i]; 
    retrieveListItemsInclude(); 

    function retrieveListItemsInclude() { 


     var clientContext = new SP.ClientContext(siteUrl); 
     var oList = clientContext.get_web().get_lists().getByTitle(lib); 

     var camlQuery = new SP.CamlQuery(); 
     camlQuery.set_viewXml('<View><RowLimit>100</RowLimit></View>'); 
     this.collListItem = oList.getItems(camlQuery); 

     clientContext.load(collListItem, 'Include(Id, DisplayName, HasUniqueRoleAssignments)'); 

     clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed)); 
    } 


     function onQuerySucceeded(sender, args) { 
      var listItemInfo = ''; 
      var listItemEnumerator = collListItem.getEnumerator();    

      while (listItemEnumerator.moveNext()) { 
       var oListItem = listItemEnumerator.get_current(); 
       listItemInfo += oListItem.get_displayName()+ '<br>'; 
      } 

      var x = listItemInfo.toString(); 
      document.getElementById(lib+"Info").innerHTML = x; 
      if (++i<3) { 
       lib = liblist[i]; 
       retrieveListItemsInclude() 
      } 
    } 


    function onQueryFailed(sender, args) { 

     var x = 'Request failed. ' + args.get_message() + '\n' + args.get_stackTrace(); 
     document.getElementById(lib+"Info").innerHTML = x; 
    } 

</script> 
+0

感謝您的這個想法!現在它可以工作。 我只是需要一個快速演示解決方案,所以髒代碼(目前)沒有問題:) – Dami

相關問題