2014-07-11 26 views
0

我正在函數(函數1)的成功處理程序中運行的循環中調用函數(函數2)。在循環的第一次迭代中,當我調用函數(函數2)時,函數被調用,並且在調用函數(函數2)的成功處理程序中指定執行操作。但在此之後,控制不會轉移到第一個函數(Function1)的成功處理程序中的循環,並且循環不再執行。下面的代碼說明了情況:調用函數(帶成功處理程序)後執行循環停止

function Function1() 
{ 
    clientContext = SP.ClientContext.get_current(); 
    website = clientContext.get_web(); 
    var oList = web.get_lists().getByTitle('Test'); 
    var camlQuery = new SP.CamlQuery(); 
    this.collListItem = oList.getItems(camlQuery); 
    clientContext.load(this.collListItem, 'Include(ID, LinkFilename, Sender, Created, DocIcon)'); 
    clientContext.executeQueryAsync(
    Function.createDelegate(this, successHandler), 
    Function.createDelegate(this, errorHandler) 
    ); 

    function successHandler() { 
     var itemsCount = this.collListItem.get_count(); 
     for (i = 0; i < itemsCount; i++) { 
      var item = this.collListItem.itemAt(i); 
      alert(item.get_fieldValues()["Created"]); 
      Function2(); 
     } 
    alert('Loop ends'); 
    } 
    function errorHandler() { 
    } 
} 

現在功能2如下:

function Function2(){ 
    var context = SP.ClientContext.get_current(); 
    var web = context.get_web(); 
    var oList = web.get_lists().getByTitle('Test2'); 
    var camlQuery = new SP.CamlQuery(); 
    this.collListItem = oList.getItems(camlQuery); 
    context.load(this.collListItem, 'Include(ID, BaseName, Created, ServerUrl)'); 
    context.executeQueryAsync(
    Function.createDelegate(this, success), 
    Function.createDelegate(this, error) 
    ); 
    function success() { 
     var itemsCount = this.collListItem.get_count(); 
     for (i = 0; i < itemsCount; i++) { 
      var item = this.collListItem.itemAt(i); 
      alert(item.get_fieldValues()["ServerUrl"]); 
     } 
    } 
    function error(){ 
    } 
} 

現在我面臨的問題是,代碼只是循環的第一個第一次迭代運行函數,即使itemsCount大於1(在此之後,寫入循環下面的代碼(顯示「循環結束」的警報)甚至不會執行)。 我無法發現錯誤,您的建議非常受歡迎。請通過這個指導我。

回答

0

這裏有一些提示:

  1. 使用Chrome和開發者控制檯(F12) - >網絡選項卡,查看來自請求響應。
  2. 添加一些console.log語句來查看您的函數是否被調用,但並不總是成功回調。例如:
function Function2() { 
    console.log("Function2"); 
    var context = SP.ClientContext.get_current(); 
    var web = context.get_web(); 
    var oList = web.get_lists().getByTitle('Test2'); 
    var camlQuery = new SP.CamlQuery(); 
    this.collListItem = oList.getItems(camlQuery); 
    context.load(this.collListItem, 'Include(ID, BaseName, Created, ServerUrl)'); 
    context.executeQueryAsync(
     Function.createDelegate(this, success), 
     Function.createDelegate(this, error) 
); 

    function success() { 
     var itemsCount = this.collListItem.get_count(); 
     for (i = 0; i < itemsCount; i++) { 
      var item = this.collListItem.itemAt(i); 
      alert(item.get_fieldValues()["ServerUrl"]); 
     } 
    } 

    function error(sender, args) { 
     console.log("Request failed: " + args.get_message() + ". " + args.get_stackTrace()); 
    } 
} 

請確保您有開發工具開放,當您使用的console.log因爲這些語句會引起IE錯誤與開發工具關閉。