jQuery mobile中更快的mobile.changePage

jQuery mobile中更快的mobile.changePage,jquery,jquery-mobile,Jquery,Jquery Mobile,我有个问题。我有一个登录页面,它是我的移动应用程序的第一个页面,包含两个字段:用户名和密码,以及一个提交按钮。提交后,我会调用ajax检查有效性,如果成功,它会将页面切换到主页 问题是:如果成功,它会显示登录页面,两个字段都为空1-2秒,然后最终切换到主页。非常慢的或滞后的 $(document).bind('pageshow', function () { $('#loginSubmit').on("click", function(){

我有个问题。我有一个登录页面,它是我的移动应用程序的第一个页面,包含两个字段:用户名和密码,以及一个提交按钮。提交后,我会调用ajax检查有效性,如果成功,它会将页面切换到主页

问题是:如果成功,它会显示登录页面,两个字段都为空1-2秒,然后最终切换到主页。非常慢的或滞后的

$(document).bind('pageshow', function () {          
            $('#loginSubmit').on("click", function(){
                    $('#loginSubmit').button('disable'); 
                    var formData = $("#loginForm").serialize();
                    console.log(formData);
                    $.ajax({
                        type: "POST",
                        url: "php/checkLogin.php",
                        cache: false,
                        data: formData,
                        success: function(data){
                            var check = $.parseJSON(data);
                            console.log(check);
                            if (check.approved == 1)
                            {
                                $.mobile.changePage('#home');
                                username = $("#username").val();
                            }
                            else
                            {
                                // wrong username or password
                            }
                        }
                    });
            }); 
        });
我添加了一个全局加载微调器(此处未显示),但它只显示半秒钟,然后消失。我不知道该怎么办

控制台日志:

POST http://localhost/jquery/php/checkLogin.php 200 OK 1.02s
POST http://localhost/jquery/ 200 OK 48ms

第一个调用似乎是有效的检查,我假设第二个调用是加载主页。

$。ajax不是您的问题,jQuery Mobile存在一些性能问题(主要是Phonegap与android平台的结合)

在你的情况下,你能做的事情很少

从我所看到的,你正在做提交作为点击事件的一部分。单击事件有300毫秒的延迟。这通常可以通过fastclick解决(通常是因为很多人不知道何时使用fastclick实现)

最糟糕的情况是,如果您正在创建移动应用程序绑定touchstart事件而不是单击事件。阅读本文了解原因:

最后ajax微调器消失了,因为ajax调用进入了成功状态,但页面仍在加载。要在这个ajax调用点显示它,请执行以下操作:

beforeSend: function() {
    $.mobile.showPageLoadingMsg(true);
}
但在此页面事件中隐藏他:

$('#home').live('pageshow', function (event) {
    $.mobile.hidePageLoadingMsg();
});
这将在页面成功加载时隐藏微调器