asp.net - jQuery黑莓ajax问题

标签 asp.net jquery jquery-mobile blackberry-simulator

我有一个可供移动设备使用的 asp.net Web 应用程序。我使用 jQuery 和 jqMobile 来实现功能和样式。

该应用程序在 safari、google chrome、iPhone、iPad 和 Android 设备上运行良好,但除了 Blackberry torch 之外,我无法让它在任何其他设备上运行。我需要让它在版本 5 和 6 黑莓设备上工作,但似乎登录的 ajax 请求总是调用错误函数,我不明白为什么。

enter image description here

该应用程序包含几个页面,但我什至无法通过黑莓上的登录页面。还有其他人设法在黑莓上进行ajax调用吗?我真的不想为黑莓手机设置单独的页面

这是登录页面aspx的代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="Sicon.Web.WAP.App.Pages.Mobile.Login" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
    <link href="../../JavaScripts/jquery.mobile.min.css" rel="stylesheet" type="text/css" />
    <script src="../../JavaScripts/jquery.min.js" type="text/javascript"></script>
    <script src="../../JavaScripts/jquery.mobile.min.js" type="text/javascript"></script>
</head>
<body>
    <form id="login" runat="server" accept-charset="utf-8">
    <div id="Invoices" data-role="page" data-theme="b">
        <div data-role="header" data-theme="b">
            <h1>
                WAP - Login</h1>
        </div>
        <div data-role="content" data-theme="b">
            <div align="center">
                <img src="Sicon_LogoHz_rgb72.png" />
            </div>
            <ul data-role="listview" data-inset="true">
                <li>
                    <input type="text" value="" name="username" placeholder="Username" id="username" />
                </li>
                <li>
                    <input type="password" value="" name="password" placeholder="Password" id="password" />
                </li>
            </ul>
            <a class="login" data-role="button" data-theme="b">Login</a> <a data-role="button"
                data-theme="a">Cancel</a>
        </div>
    </div>
    </form>
    <script type="text/javascript">

        var _ajaxEnabled = true;

        $(document).ready(function()
        {
            _ajaxEnabled = $.support.ajax;
        });

        //Get base URL
        var baseUrl = "<%= ResolveUrl("~/") %>";

        //Function to resolve a URL
        function ResolveUrl(url)
        {
            if (url.indexOf("~/") == 0) 
            {
                url = baseUrl + url.substring(2);
            }
            return url;
        }

        //Login form Login link click
        $("#login a.login").click(function (e) {
            //Get the form
            var $form = $(this).closest("form");

            //Perform login
            return app.login($form);
        });

        //Login form submit
        $("#login").submit(function (e) {
            //Get the form
            var $form = $(this);

            //Perform login
            return app.login($form);
        });

        //class to handle login
        var app = {
            login: function ($form) {

                var $Username = $("#username").val();
                var $Password = $("#password").val();

                //Call the approve method on the code behind
                $.ajax({
                    type: "POST",
                    url: ResolveUrl("~/Pages/Mobile/Login.aspx/LoginUser"),
                    data: "{'Username':'" + $Username + "', 'Password':'" + $Password + "' }", //Pass the parameter names and values
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    async: true,
                    error: function (jqXHR, textStatus, errorThrown) {
                        alert("Error- Status: " + textStatus + " jqXHR Status: " + jqXHR.status + " jqXHR Response Text:" + jqXHR.responseText) },
                    success: function (msg) {
                        if (msg.d == true) {
                            window.location.href = ResolveUrl("~/Pages/Mobile/Index.aspx");
                        }
                        else {
                            //show error
                            alert('login failed');
                        }
                    }
                });

                return false;
            }
        }
    </script>
</body>
</html>

最后是登录方法的代码:

/// <summary>
/// Logs in the user
/// </summary>
/// <param name="Username">The username</param>
/// <param name="Password">The password</param>
/// <returns></returns>
[WebMethod, ScriptMethod]
public static bool LoginUser( string Username, string Password )
{
    try
    {
        StaticStore.CurrentUser = new User( Username, Password );

        //check the login details were correct
        if ( StaticStore.CurrentUser.IsAuthentiacted )
        {
            //change the status to logged in
            StaticStore.CurrentUser.LoginStatus = Objects.Enums.LoginStatus.LoggedIn;

            //Store the user ID in the list of active users
            ( HttpContext.Current.Application[ SessionKeys.ActiveUsers ] as Dictionary<string, int> )[ HttpContext.Current.Session.SessionID ] = StaticStore.CurrentUser.UserID;

            return true;
        }
        else
        {
            return false;
        }
    }
    catch ( Exception ex )
    {
        return false;
    }
}

最佳答案

你没有说你使用的是哪个版本的jqmobile。 4.1 版本已于 4 月 7 日发布。您必须记住,jqmobile 甚至还没有 Beta 版本,并且 BB OS 5 被列为 B 级 (http://jquerymobile.com/gbs/),因此它正在获得较少关注。

您的应用程序中可能还有其他 ajax 需要处理,但登录如此简单,为什么不将其重组为简单的表单帖子?

此外,承认 BB5 是一个问题:

https://github.com/jquery/jquery-mobile/issues/1245

关于asp.net - jQuery黑莓ajax问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5567130/

相关文章:

jquery - 在 Android 上查看闪烁

asp.net - 如何在 ASP.Net 项目中包含 jQuery?

asp.net - 关于单轨的反馈

javascript - 谁来查找动态类名

具有 jquery 移动风格的 jQuery-File-Upload 按钮

header - 如何使用数据位置为 'fix' 的 jquery mobile ="fixed"页眉页脚位置

jquery - ckeditor jquery 集成

c# - 如果为 false,则停止在自定义验证器中执行

jquery - 如何在 jQuery 中使用 AND(&&) 运算符?

javascript - 突出显示事件页面