JQuery Blackberry Ajax проблемы - PullRequest
       13

JQuery Blackberry Ajax проблемы

6 голосов
/ 06 апреля 2011

У меня есть веб-приложение asp.net, которое я делаю доступным для мобильных устройств. Я использую jQuery и jqMobile для функциональности и стиля.

Приложение отлично работает в Safari, Google Chrome, на устройствах iPhone, iPad и Android, но я не могу заставить его работать ни на чем, кроме факела Blackberry. У меня есть требование, чтобы оно работало на устройствах Blackberry версий 5 и 6, но кажется, что запрос ajax для входа всегда вызывает функцию ошибки, и я не могу понять, почему.

enter image description here

Приложение содержит несколько страниц, но я даже не могу пройти мимо страницы входа на BlackBerry. Кому-нибудь еще удалось заставить 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;
    }
}

Ответы [ 2 ]

2 голосов
/ 15 апреля 2011

Вы не говорите, какую версию jqmobile вы используете.Версия 4.1 была выпущена 7 апреля. Вы должны помнить, что jqmobile еще не выпущен в бета-версии, и что BB OS 5 указана как B-grade (http://jquerymobile.com/gbs/), поэтому ей уделяется меньше внимания.

Возможно, в вашем приложении есть другой ajax, но вход в систему настолько прост, почему бы не реструктурировать как простую форму сообщения?

Кроме того, признание того, что BB5 является проблемой:

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

0 голосов
/ 27 декабря 2012

Наконец, после недели сильного разочарования, я получил решение ....

Вам необходимо разрешить междоменный доступ в вашем BrowserField следующим образом.

BrowserFieldConfig config=new BrowserFieldConfig();
config.setProperty(BrowserFieldConfig.NAVIGATION_MODE,BrowserFieldConfig.NAVIGATION_MODE_POINTER);
 config.setProperty( BrowserFieldConfig.JAVASCRIPT_ENABLED, Boolean.TRUE );
 config.setProperty(BrowserFieldConfig.ALLOW_CS_XHR, Boolean.TRUE);//allow cross-domain
 browser=new BrowserField(config);
...