2013-03-26 74 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。