asp.net - jQuery blackberry ajax problemas
jquery-mobile blackberry-simulator (2)
Finalmente, después de una semana de intensa frustración, obtuve la solución ...
Debe permitir el acceso de dominio cruzado en su BrowserField de la siguiente manera.
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);
Tengo una aplicación web asp.net que estoy poniendo a disposición de los dispositivos móviles. Estoy usando jQuery y jqMobile para la funcionalidad y el estilo.
La aplicación funciona muy bien en safari, google chrome, en los dispositivos iPhone, iPad y Android, pero no puedo hacerlo funcionar en otra cosa que no sea la antorcha Blackberry. Tengo un requisito para que funcione en la versión 5 y 6 dispositivos Blackberry, pero parece que la solicitud ajax para iniciar sesión siempre llama a la función de error y no puedo ver por qué.
La aplicación contiene algunas páginas, pero ni siquiera puedo pasar la página de inicio de sesión en Blackberry. ¿Alguien más ha logrado obtener llamadas ajax trabajando en Blackberry? Realmente no quiero tener un conjunto separado de páginas solo para blackberrys ''
Aquí está el código para la página de inicio de sesión 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>
Y finalmente el código detrás del método de inicio de sesión:
/// <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;
}
}
No dices qué versión de jqmobile estás usando. La versión 4.1 se lanzó el 7 de abril. Debe tener en cuenta que jqmobile aún no está en el lanzamiento de Beta, y que BB OS 5 aparece como B-grade (http://jquerymobile.com/gbs/) por lo que se está convirtiendo menos atencion.
Probablemente tengas que lidiar con otro ajax en tu aplicación, pero el inicio de sesión es tan simple, ¿por qué no reestructurarlo como una simple publicación de formulario?
Además, una admisión de que BB5 es un problema: