2015-04-01 121 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); 
}