2015-04-01 122 views
0

我有我想要獲取作者名稱的名稱的lib名稱列表。爲此,我對庫名進行了每個循環並進行異步調用。一旦通話結束,我想用庫名返回所有作者姓名。 雖然我嘗試使用異步調用,但在調用成功之前返回回調。所以我嘗試成功返回回調,但現在回調一旦完成第一個請求就返回。 我嘗試使用同步呼叫,但會阻止用戶界面。那麼最好的方法是什麼?我的代碼多個Ajax異步調用

function FetchLibAuthorID(LibCollection, callback) { 
$.each(LibCollection, function (key, value) { 
    $.ajax({ 
     url: value.MetadataURI + '?$select=schemaXml', 
     type: "GET", 
     headers: { "Accept": "application/json;odata=verbose" }, 
     success: function (data) { 
      var listProperties = schemaXml2Json(data.d.SchemaXml); 
      LibCollection[key].AuthorID = listProperties.Author; 
      LibCollection[key].RootFolder = listProperties.RootFolder; 
     }, 
     error: function (data2) { 
      alert('error'); 
     } 
    }); 
}); 
return callback(LibCollection); 

}

+0

添加屬性異步:真 – Banik 2015-04-01 11:14:29

+1

默認情況下,Ajax調用是異步只。我對麼?那麼如果有任何特定的原因添加該屬性 – 2015-04-01 12:26:05

回答

0
var libCollection = [{ MetadataURI: "url1" }, { MetadataURI: "url2" }]; 

function loadLibrary(complete) { 
    if (libCollection.length === 0) { 
     complete(); 
     return; 
    } 

    var lib = libCollection.pop(); 
    $.ajax({ 
     url: lib.MetadataURI + '?$select=schemaXml', 
     type: "GET", 
     headers: { "Accept": "application/json;odata=verbose" }, 
     complete: function (data) { 
      var listProperties = schemaXml2Json(data.d.SchemaXml); 
      LibCollection[key].AuthorID = listProperties.Author; 
      LibCollection[key].RootFolder = listProperties.RootFolder; 

      loadLibrary(complete); 
     } 
    }); 
}; 

// call the function 

loadLibrary(function() { 
    alert("all libraries have been loaded") 
}); 
0
 function FetchLibAuthorID(LibCollection, callback) { 
    var count=0; 
     $.each(LibCollection, function (key, value) { 
    count++; 
      $.ajax({ 
       url: value.MetadataURI + '?$select=schemaXml', 
       type: "GET", 
       headers: { "Accept": "application/json;odata=verbose" }, 
       success: function (data) { 
    count--; 
        var listProperties = schemaXml2Json(data.d.SchemaXml); 
        LibCollection[key].AuthorID = listProperties.Author; 
        LibCollection[key].RootFolder = listProperties.RootFolder; 
       }, 
       error: function (data2) { 
        alert('error'); 
       } 
      }); 
     }); 

    while(count>0) 
    { 

    } 
    return callback(LibCollection); 
}