Asp.net jQuery blackberry ajax问题
我有一个asp.net web应用程序,可供移动设备使用。我使用jQuery和jqMobile实现功能和样式 该应用程序在safari、google chrome、iPhone、iPad和Android设备上都能很好地工作,但除了Blackberry torch,我无法让它在其他任何设备上工作。我需要让它在版本5和版本6的blackberry设备上工作,但似乎ajax登录请求总是调用错误函数,我不明白为什么 该应用程序包含几个页面,但我甚至无法通过黑莓上的登录页面。还有其他人能在黑莓手机上实现ajax调用吗?我真的不想有一套单独的网页只为黑莓的 以下是登录页面aspx的代码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登录请求总是调用错误函数,我不明白为什么 该应用程序包含几个页面,但我甚至无法通过黑莓上的登录页面。还有其他人能在黑莓手机上实现
<%@ 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上的不稳定浏览器