0

我在糟糕的互联网上强制测试我的应用程序,以了解用户如何通过我的应用程序体验导航,但在某些事件上显示加载程序时遇到问题。

当我将它们放在 ajax 调用中时,加载器在页面内已经存在的事件上工作正常:

        beforeSend: function() {
            $.mobile.loading("show");
        },
        complete: function() {
            $.mobile.loading("hide");
        },

但它们在 pagecreate 或 pagebeforeshow 等事件上效果不佳,例如:

$("#points").on("pagecreate", function() {
    $.ajax({
        type: "GET",
        url: hb_base_url + "consumer/" + user_id + "/merchants/nature/" + business_point_search + "/offset/" + offset + "/" + limit,
        crossDomain: true,
        contentType: "application/json",
        dataType: "json",
        beforeSend: function() {
            $.mobile.loading("show");
        },
        complete: function() {
            $.mobile.loading("hide");
        },
        success: function(data) {
            //do stuff
        },
        error: function(x, t, m) {
            alert(connection_lost);
            $.mobile.back();
        }
    });
});

当我导航到这个页面时,我的连接挂起,我根本没有加载,它只是挂在那里,用户感觉应用程序已经崩溃。

有什么设置可以解决这个问题吗?我想在我的所有页面更改中显示一个加载器,等待所有页面事件完成后再隐藏它。

编辑 我也试过:

$(document).on("pagebeforehide", function(){
    $.mobile.loading("show");
});


$(document).on("pageshow", function(){
    $.mobile.loading("hide");
});

但没有成功,即使在需要很长时间才能改变的页面上。

4

1 回答 1

1

您可以使用全局回调函数,例如ajaxStartajaxStop来预定义您的beforeSendcomplete选项:

$(document).ajaxStart(function() {
    $.mobile.loading('show');
});

$(document).ajaxStop(function() {
    $.mobile.loading('hide');
});

$(document).ajaxComplete(function() {
    $.mobile.loading('hide');
});
于 2013-07-10T09:50:49.053 回答