如何使用jQuery延迟对象实现预加载器

时间:2012-06-21 03:08:02

标签: jquery jquery-deferred

我正在使用jQuery延迟对象,因此我可以从多个来源提取数据,但是不确定如何最好地在加载消息中进行编码,在一切都被解析时显示,然后在一切都被解决或被拒绝时隐藏

当前代码:

 jQuery.when(loadData('ws-get-shops.php', {shopId:123}),loadData('ws-get-customers.php')).then(updateResults,showError);


var loadData = function(url, data){

    var jqxhr = jQuery.ajax({
        url:url,
        data:data,
        dataType:'jsonp',
        timeout:60000
    });

    return jqxhr;
}

1 个答案:

答案 0 :(得分:2)

您可以在开始ajax调用之前添加(或显示)加载消息,例如:

$('#loadingMsg').show();
jQuery.when(...).then(updateResults,showError);

然后在updateResultsshowError功能完成后删除(或隐藏)它,例如:

function updateResults(...) {
    $('$#loadingMsg').hide();
    ...
}

function showError(...) {
    $('$#loadingMsg').hide();
    ...
}

您还可以将另一个函数作为第三个参数添加到then函数中,该函数在when函数取得进展时调用,并更新您的加载消息以显示百分比等。

参考:http://api.jquery.com/deferred.then/