1

我试图使用 Ajax 调用检索 CRM 记录。

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;它可以使这个函数异步吗?

提前致谢。

4

1 回答 1

0

我想我得到了你所要求的。

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

只需像这样从您的 .js 文件中调用该函数。

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

function calledForAsync()
{
//Your Code
}

当 RetrieveCrmRecords() 中的操作完成时,其余代码将正常执行,然后进入调用的 ForAsync()。

这称为异步调用。我希望你问这个。

谢谢,

阿尼什。

于 2013-05-22T07:30:59.537 回答