2013-07-09 1 views
1

3 개의 라이브러리가 있고 라이브러리 항목 이름을 표시하고 싶습니다. 라이브러리 하나만 표시하려면 모든 항목이 정상이지만 두 개 이상의 라이브러리 항목을 찾고 있다면 하나의 라이브러리 항목 만 표시합니다. 내 코드에서 무엇이 잘못 되었습니까?자바 스크립트로 공유 라이브러리 항목 표시

<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

0

.ASHX 웹 서비스를 만들어 SharePoint Server에 배포 할 수 있습니다. 그런 다음 REST와 JSON을 사용하여 JavaScript의 HttpRequest를 사용하여 쿼리 할 수 ​​있습니다.

http://msdn.microsoft.com/en-us/library/bb457204(v=office.12).aspx

+0

그냥 코드를 수정할 가능성은 없을까 (전역 변수를 피해야한다로하지만 코드는 ... 더럽)? – Dami

관련 문제