2013-03-26 58 views
1

我正在尝试使用Ajax调用检索CRM记录。如何使ajax调用异步?

function RetrieveCrmRecords(entName, fields, filter, callback, orderby, errcallback) { 
    ///<summary> 
    /// function to Retrieve Multiple CRM records. 
    ///</summary> 
    //debugger; 
    var async = !!callback; 

    var setEntityName = entName + 'Set'; 
    var _callback = callback; 

    filter = (filter) ? "&$filter=" + filter : ''; 

    var query1 = CrmServerUrl + ODATA + "/"; 
    var query2 = setEntityName + "()" + "?"; 
    var queryUrl = query1 + query2; 

    if (fields != null) queryUrl += "$select=" + fields.join(','); 
    if (orderby != null) { 
     if (fields != null) { 
      queryUrl += '&'; 
     } 
     queryUrl += "$orderby=" + orderby; 
    } 
    queryUrl += filter; 

    var performRequest = function (queryUrl, fnCallback) { 
     var async = !!fnCallback; 
     var opts = { url: queryUrl } 

     return _makeRequest(opts, async, function (data) { 
      var nextData = data.__next || null; 
      var resultsData = data.results || data; 
      var responseData = { 'results': resultsData, 'next': nextData } 

      if (nextData) { 
       responseData.LoadNext = function (callback) { 
        return performRequest(nextData, callback); 
       }; 
      } 

      if (async) { 
       fnCallback(responseData); 
      } 
      else { 
       return responseData; 
      } 
     }, errcallback); 
    }; 

    return performRequest(queryUrl, callback); 
} 

由于我对ajax调用没有太多的想法,所以很难使这个函数对我来说是异步的。

请专家帮我理解,这个功能是同步的,因为var async = !!callback;这个?

如果代替这一行我写var async=true;它可以使这个功能异步吗?

在此先感谢。

回答

0

我想我明白你的意思了。

请不要从复制和粘贴此功能的地方查看此文件。 如果你是新手,这会让你感到困惑。

只需从你的.js文件中调用函数就可以了。

function RetrieveCrmRecords(entName, fields, filter, calledForAsync, orderby, errcallback) { 
//Your Code 
} 

function calledForAsync() 
{ 
//Your Code 
} 

当操作RetrieveCrmRecords()将完成剩下的代码将精细执行,然后它会进入calledForAsync()。

这被称为异步呼叫。 我希望你对此有所要求。

谢谢,

Anish。