1

我有一个问题。我有一个登录页面,这是我的移动应用程序的第一页,包含两个字段:用户名和密码,以及一个提交按钮。提交后,我进行 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

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

4

1 回答 1

2

$.ajax 不是你的问题,jQuery Mobile 有一些性能问题(主要是 Phonegap 与 android 平台结合使用)。

在你的情况下,你可以做一些事情。

从我可以看到你正在提交作为点击事件的一部分。点击事件有 300 毫秒的延迟。这通常可以通过 fastclick 修复(通常是因为很多人不明白何时使用 fastclick 实现):https ://github.com/drowne/jquery.mobile.fastclick 。

最坏的情况,如果您正在创建移动应用程序绑定 touchstart 事件而不是单击事件。阅读本文以了解原因:Touchstart 与 Click。引擎盖下会发生什么?

最后,ajax spinner 消失了,因为 ajax 调用进入了成功状态,但页面仍在加载。为了解决这个问题,仍然在这个 ajax 调用点显示它:

beforeSend: function() {
    $.mobile.showPageLoadingMsg(true);
}

但是将他隐藏在此页面事件中:

$('#home').live('pageshow', function (event) {
    $.mobile.hidePageLoadingMsg();
});

当页面成功加载时,这将隐藏一个微调器。

于 2012-12-23T09:10:11.623 回答