Asp.net jQuery blackberry ajax问题

Asp.net jQuery blackberry ajax问题,asp.net,jquery,jquery-mobile,blackberry-simulator,Asp.net,Jquery,Jquery Mobile,Blackberry Simulator,我有一个asp.net web应用程序,可供移动设备使用。我使用jQuery和jqMobile实现功能和样式 该应用程序在safari、google chrome、iPhone、iPad和Android设备上都能很好地工作,但除了Blackberry torch,我无法让它在其他任何设备上工作。我需要让它在版本5和版本6的blackberry设备上工作,但似乎ajax登录请求总是调用错误函数,我不明白为什么 该应用程序包含几个页面,但我甚至无法通过黑莓上的登录页面。还有其他人能在黑莓手机上实现

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

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

该应用程序包含几个页面,但我甚至无法通过黑莓上的登录页面。还有其他人能在黑莓手机上实现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>

WAP-登录
登录取消 var _ajaxEnabled=true; $(文档).ready(函数() { _ajaxEnabled=$.support.ajax; }); //获取基本URL var baseUrl=“”; //函数来解析URL 函数解析url(url) { if(url.indexOf(“~/”)==0) { url=baseUrl+url.substring(2); } 返回url; } //登录表单登录链接点击 $(“#登录a.login”)。单击(函数(e){ //拿到表格 var$form=$(this).closest(“form”); //执行登录 返回app.login($form); }); //登录表单提交 $(“#登录”).submit(函数(e){ //拿到表格 var$form=$(此); //执行登录 返回app.login($form); }); //类来处理登录 变量应用={ 登录:函数($form){ var$Username=$(“#Username”).val(); var$Password=$(“#Password”).val(); //对代码隐藏调用approve方法 $.ajax({ 类型:“POST”, url:ResolveUrl(“~/Pages/Mobile/Login.aspx/LoginUser”), 数据:“{'Username':'”+$Username+“,'Password':'“+$Password+“'}”,//传递参数名称和值 contentType:“应用程序/json;字符集=utf-8”, 数据类型:“json”, async:true, 错误:函数(jqXHR、textStatus、errorshown){ 警报(“错误-状态:+textStatus+”jqXHR状态:+jqXHR.Status+“jqXHR响应文本:+jqXHR.responseText”), 成功:功能(msg){ 如果(msg.d==true){ window.location.href=ResolveUrl(“~/Pages/Mobile/Index.aspx”); } 否则{ //显示错误 警报(“登录失败”); } } }); 返回false; } }
最后是登录方法的代码:

/// <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;
    }
}
//
///登录用户
/// 
///用户名
///密码
/// 
[WebMethod,ScriptMethod]
公共静态bool登录用户(字符串用户名、字符串密码)
{
尝试
{
StaticStore.CurrentUser=新用户(用户名、密码);
//检查登录详细信息是否正确
if(StaticStore.CurrentUser.IsAuthenticated)
{
//将状态更改为已登录
StaticStore.CurrentUser.LoginStatus=Objects.Enums.LoginStatus.LoggedIn;
//将用户ID存储在活动用户列表中
(HttpContext.Current.Application[SessionKeys.ActiveUsers]作为字典)[HttpContext.Current.Session.SessionID]=StaticStore.CurrentUser.UserID;
返回true;
}
其他的
{
返回false;
}
}
捕获(例外情况除外)
{
返回false;
}
}

您没有说您正在使用哪个版本的jqmobile。4.1版于4月7日发布。您必须记住,jqmobile甚至还没有发布Beta版,BBOS5被列为B级(http://jquerymobile.com/gbs/)因此,人们对它的关注越来越少

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

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


经过一周的强烈挫折,我终于找到了解决办法

您需要在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);

我尝试了本文中列出的答案,检查错误状态并返回。这只是意味着当错误被发现时不会发生任何事情。。。这一行有输入错误的原因吗:如果(StaticStore.CurrentUser.isauthenticated)@JackWilson-没有,没有原因。虽然它是一个有效的属性名,但它可以编译。问题不在于WebMethod是否有其他设备可以调用它并登录。问题在于black berry总是调用ajax调用的错误处理程序,它在blackberry torch上工作,因此代码可以工作,但在使用alpha one的其他版本5和6设备上不工作。我希望ajax能够在移动站点的其他部分正常工作。我可以重新开发登录页面,但我必须对其余页面执行同样的操作。您是否开发过BB web应用程序?仅在BB上开发本机应用程序。我们正在使用JQM访问iPhone和Android。但我已经处理了BB5上的不稳定浏览器