¿Cómo obtener datos de un request post desde JqueryMobile?



Seguro que a más de uno le ha pasado el problema de enviar datos tipo POST a una página esperando que retorne la data ya ejecutada después del post. A mí me pasó y no encontraba una solución posible y sencilla, así que me leí casi la documentación completa de JqueryMobile y encontrarme con algo como esto (Resumo un poco): http://jquerymobile.com/demos/1.1.0/docs/pages/page-dynamic.html Internally, when the user clicks on one of these links, the application intercepts the internal$.mobile.changePage() call that is invoked by the frameworks’ default link hijacking behavior. It then analyzes the URL for the page about to be loaded, and then decides whether or not it should handle the loading itself, or to let the normal changePage() code handle things. The application was able to insert itself into the changePage() flow by binding to the pagebeforechange event at the document level:

// Listen for any attempts to call changePage().
$(document).bind( "pagebeforechange", function( e, data ) {
// We only want to handle changePage() calls where the caller is
 // asking us to load a page by URL.
 if ( typeof data.toPage === "string" ) {
// We are being asked to load a page by URL, but we only
 // want to handle URLs that request the data for a specific
 // category.
 var u = $.mobile.path.parseUrl( data.toPage ),
 re = /^#category-item/;
if ( u.hash.search(re) !== -1 ) {
// We're being asked to display the items for a specific category.
 // Call our internal method that builds the content for the category
 // on the fly based on our in-memory category data structure.
 showCategory( u, data.options );
// Make sure to tell changePage() we've handled this call so it doesn't
 // have to do anything.
 e.preventDefault();
 }
 }
});

Pues vayamos a lo que nos concierne y nos ayudará, gracias a eso claro.

Este será el código javascript:

// Listen for any attempts to call changePage(). 
$(document).bind("pagebeforechange", function(e, data) { 
	// We only want to handle changePage() calls where the caller is asking to load a page by URL. 
	if (typeof data.toPage === "string") { 
		// We only want to handle #partypoint url. 
		var u = $.mobile.path.parseUrl(data.toPage); 
		var partypoint = /^#partypoint/; 
		if (u.hash.search(partypoint) !== -1) { 
			// Display PAGE for the selected URL. 
			showPage(u, data.options); 
			e.preventDefault(); 
		} 
	} 
}); 

// Generate markup for the page, and then make that page the current active page. 
function showPage(urlObj, options) { 
	// Get the url parameter 
	var qrUrl = decodeURIComponent(urlObj.hash.replace(/.*url=/, ""));   
	// The div(role-page) we use to display section is already in the DOM. 
	// The id of the page we are going to write the content into is specified in the hash before the '?'. 
	var pageSelector = urlObj.hash.replace(/\?.*$/, ""); 
	if (qrUrl) { 
		// Get the page we are going to write content into. 
		var $page = $(pageSelector); 
		// Get the header for the page. 
		var $header = $page.children(":jqmData(role=header)"); 
		var markup = ''; 
		//Select the data send to the post page (if you have it)
		var Datasend=$("#formulario").serialize(); 
		$.ajax({ 
			url : qrUrl, 
			data : Datasend, 
			type : 'POST', 
			dataType : 'json', 
			success : function (data) { 
// Find the h1 element in the header and inject the hostname from the url. 
				$header.find("h1").html(data.Title); 
				// Get the content area element for the page. 
				var $content = $page.children(":jqmData(role=content)"); 
				markup = data.Data; 
				// Inject the data markup into the content element. 
				$content.html(markup); 
				// Make sure(if you want) the url displayed in the the browser's location field includes parameters 
				options.dataUrl = urlObj.href; 
				// Now call changePage() and tell it to switch to the page we just modified. 
				$.mobile.changePage($page, options); 
			}, 
			error : function (jqXHR, textStatus, errorThrown) { 
				/*Make your error message*/ 
			} 
		}); //Close Ajax 
	} // Close qrUrl 
}//Close Function

Creamos la pantalla principal(index.html, por ejemplo):

Vamos a poner, como principal, un formulario, más abajo se explica, además tendremos que poner la sección donde se cargará el resultado:

<div data-role="page" class=".ui-page">
    <div data-role="header" data-theme="b" data-position="fixed">
        <h1>Party Point</h1>
    </div>

    <div data-role="content" class="wrapper">
        <div class="ui-corner-top ui-header ui-bar-b">
            <h1 class="ui-title" role="heading" aria-level="1">Login</h1>
        </div>
        <div class="ui-corner-bottom ui-content ui-body-c">
            <fieldset class="container_12">
                    <form action="#partypoint?url=inc%2Flogin.php" method="post" id="formulario" name="formulario">
                        <input type="hidden" id="Accion" name="Accion" value="Login">
                        <div data-role="fieldcontain">
                            <label for="Username">Usuario:</label>
                            <input type="text" name="Username" id="Username" value=""  data-mini="true" />
                        </div>
                        <div data-role="fieldcontain">
                            <label for="ClaveUser">Clave:</label>
                            <input type="password" name="ClaveUser" id="ClaveUser" value=""  data-mini="true" />
                        </div>
                        <div class="ui-block-a">
                            <button type="submit" data-theme="b" data-mini="true" class="ui-btn-hidden" aria-disabled="false">Enviar</button>
                        </div>
                        <div class="ui-block-b">
                            <a href="#partypoint?url=inc%2Fregistrar.inc" data-role="button" data-rel="dialog" data-transition="pop" data-theme="b"  data-mini="true">Registrarse</a>
                        </div>
                    </form>
            </fieldset>
        </div>
    </div>
</div>

Aquí vemos que el formulario enviará el dato a esta url:

#partypoint?url=inc%2Flogin.php
Tenemos varios datos que tomar en cuenta:
  1. #partypoint -> El Id de la sección donde irá la data que enviamos por ajax
  2. url= -> Indica lo que vamos a cargar
  3. inc%2FLogin.php -> Este es el archivo a cargar (inc/Login.php), se pone %2F para que lo interprete el script de arriba.
Vamos a poner la sección donde se cargará el resultado:
<div data-role="page" id="partypoint">
    <div data-role="header" data-theme="b" data-position="fixed">
        <a href="#home" data-icon="home" data-iconpos="notext" data-theme="f">Home</a>
        <h1>Home</h1>
        <a href="#home" data-icon="arrow-l" data-rel="back">Back</a>
    </div>
    <div data-role="content">
    </div>
    <div data-role="footer" class="ui-bar" data-theme="a" data-position="fixed" data-id="footer">
        <a href="#about" data-icon="info">About</a>
    </div>
</div>

Aquí vemos lo siguiente:

  1. id=”partypoint” -> El Id de la sección a editar a través del ajax.
  2. <h1>= -> Donde cargaremos el Título del ajax obtenido
  3. data-role=”content”-> Aquí cargaremos el contenido obtenido.

Veamos lo que hace ahora la ejecución del formulario, presionamos Submit(Enviar):

  1. El Script verificará si la data enviada tiene a #partypoint en su URL.
    •  #partypoint?url=inc%2Flogin.php
  2. Como lo contiene pues pasará por la función showPage().
  3. La función buscará el url.
    • inc%2Flogin.php
  4. Buscamos el ID de la sección (data-role=”page”  id=”¿?”)
    • pageSelector=partypoint
  5. Convertimos a objeto el pageSelector y obtenemos el objeto header
    • var $page = $(pageSelector);
    • var $header = $page.children(“:jqmData(role=header)”);
  6. Serializamos la data del formulario
    • var Datasend=$(“#formulario”).serialize();
  7. Envíamos la data y recibimos el json
  8. Modificamos el título
    • $header.find(“h1″).html(data.Title);
  9. Buscamos la sección content y agregamos la data recibida
    • var $content = $page.children(“:jqmData(role=content)”);
    • $content.html(markup);
  10. Hacemos el cambio de página, como si hicieramos click pero lo hacemos por javascript:
    • $.mobile.changePage($page, options);

Yo recomendaría agregar esta línea de código justo después del cambio de página:

$page.page(“destroy”).page();

Esto destruirá todo el diseño de la sección y lo volverá a crear. Esto lo hacemos porqué a veces si le das para atrás y ejecutas nuevamente una llamada ajax para rellenar la data pues esa “page” ya estará creada y no se recargará y la data que venga dentro no estará formateada visualmente, si destruyes la página y la vuelves a crear todo el diseño se recreará.

Se puede usar también $page.trigger(‘create’) ; Pero he visto que a veces no me funciona, o quizás lo esté haciendo mal, pero mejor ir a la lo seguro y que funciona perfectamente.

Aquí está el ejemplo, pero no está la página de Login.php, por si acaso:

http://jsfiddle.net/juanmboehme/bcvrc/


Simple confirmacion con jquery al eliminar registros

Algo que siempre queremos hacer es alertarle al usuario que esta a punto de eliminar un registro, cuidado, aqui no hay forma para volver atras, para ayudar a los nuevos en el mundo del CRUD , tenemos hoy un tip con jquery.

Jquery:


$('.borrar').click(function(){
var mensaje = confirm(jQuery(this).attr('title'));
return mensaje
});

Leer el resto de esta entrada »


Libro Web 2.0 { descarga }

La evolución forma parte del sistema donde vivimos, el hombre mismo es lo que es hoy gracias a la evolucion, y no solo a la evolución de su naturaleza, sino tambien a la evolución del conocimiento, hoy se piensa distinto a como se pensaba ayer, pero de igual forma nuestro mundo paralelo, el internet, sigue evolucionando talvez más rápido que nuestro mundo “real”, lo curioso es que muchos vivimos del mundo paralelo, y para seguir viviendo tenemos que tratar de evolucionar a la par con el.

Y es que no estoy hablando mas que de internet, ese mundo que a todos nos favorece aunque algunos digan lo contrario, la web sigue su paso agigantado, caminado o mejor dicho corriendo hacia lo que llegará a ser un Sistema Operativo, internet como sistema operativo, donde las unicas cosas que nos preocuparan en un futuro es tener conocimiento sobre Redes e Internet, hoy estamos migrando desde lo que es una Web 1.0, esta que presenta un refresh por click hacia un Web 2.0 donde ironicamente el “refresh” si existe, pero engañamos al ojo con lo que ya “no era tan usado”: el iframe y de igual forma como muchos decian (cuando no pensabamos en una Web 2.0) “no uses tanto el JavaScript”, pero la realidad es que, hoy es JavaScript el centro de todo esto, más la simplicidad de un diseño que ironicamente es mas hermoso que los diseños de las Web 1.0, donde se pensaba que los graficos desgradados, las curvas, los gráficos tipos mac eran lo que hacian una web hermosa, hoy vemos que no es asi, que la simplicidad sigue siendo mas interesante.

Nevagando me he encontrado en algunos blogs dedicado a la tecnologia con lo que se acaba de publicar, y es el Libro Web 2.0 listo para descargar.

Aun es poco, tenemos que ir acostumbrando nuestras mentes a lo que seran Web 3.0, Web 4.0 y lo que finalmente sea Internet como Sistema Operativo, y es que mirando las Googles Apps, donde puedes usar un procesador de plabras, una hoja de calculos, un programas para presentaciones, un meebo para conectarnos al servicio msn, no me queda de otro que asegurar la venida de este sistema operativo.


Crear cuentas Gmail rapidamente

Aquí tengo un manual “TRUCO” para crear cuentas de Gmail, en español, más rápidamente, sin tener que estar llenando todo, solamente deberíamos llenar la palabra en imagen que aparece casi al final del formulario y claramente darle a aceptar, aunque si quieren también le quitamos el aceptar.

Esto sirve para los que tienen que crear cuentas en secuencia, jb1, jb2, jb3, etc...

Bueno lo primero es abrir la página para crear cuentas ::Crear Cuenta:: Una vez que la pantalla cargue copiamos el siguiente código que aparece más abajo. Código(Sin enters, ni espacios, ni nada, tal y como está) Desde javascript hasta(‘listo’); inclusive:
Link

Ahora con esto vamos a la página y sustituimos el url por esto.
Una vez colocado presionamos la tecla enter.
Imagen 1Listo

Un popup nos preguntará por un número o letra y colocamos el número ó letra que queramos para crear la cuenta.
Ahora solo faltan 2 cosas: Verificar que esa cuenta no exista y llenar la palabra en letras que aparece al final del formulario. Si todo está correcto simplemente presionamos Aceptar y ya tendremos la cuenta creada, sin tener que llenar todos los datos que aparecen en pantalla tantas veces.

Ahora a explicar el código que aparece arriba:
Primero que todo hay que tomar en cuenta que las cuentas creadas de esta manera tendrán las siguientes propiedades:
Nombre:el que quieras
Apellido: El que quieras
Nombre de Registro= Nombre + Apellido + el número que el popup te pregunta;
Clave:Nombre + Apellido + el número que el popup te pregunta;
ReClave:Nombre + Apellido + el número que el popup te pregunta;
Pregunta Personal:Qs?
Respuesta Personal:Nada;

Pongamos un ejemplo, el que aparece en el código más arriba(poniendo 2 en el popup que te pregunta);
Nombre:JM
Apellido: BOEHME
Nombre de Registro= JMBOEHME2@gmail.com
Clave:JMBOEHME2
ReClave:JMBOEHME2
Pregunta Personal:Qs?
Respuesta Personal:Nada;

Listo.

Ahora veamos las variables o como cambiarlas:
Primero tenemos que decir que lo que ves en rojo son las variables y en verde los valores, podrás cambiar los valores pero toma en cuenta:
N= Es el nombre que aparece en tu cuenta, podrás cambiarlo por lo que sea(el ejemplo dice:JM).
A= Es el apellido que aparece en tu cuenta, podrás cambiarlo por lo que sea(el ejemplo dice:BOEHME).
NN= Es un número(#) ó letra que le pondrá a tu correo y a tu password(te saldrá un popup preguntando).
objeto.Email.value= Es el correo que tendrá (N+’.'+A+NN, donde N es nombre, un punto . , A apellido y NN el número o letra del popup)
objeto.Passwd.value y objeto.PasswdAgain.value= Como su nombre indica contendrán el password de la cuenta que se va a crear de la siguiente manera(N+A+NN= Nombre apellido y número o letra de l popup)

Yo recomiendo solamente cambiar la clave agregando algo extra ó algo fijo por ejemplo:
objeto.Passwd.value=N+A+NN+’pp2′
objeto.PasswdAgain.value=N+A+NN+’pp2′
La clave nueva sería:
JMBOEHME2pp2
ó también podemos cambiar el orden:
objeto.Passwd.value=’pp2′+N+A+NN
objeto.PasswdAgain.value=’pp2′+N+A+NN
La clave nueva sería:
pp2JMBOEHME2
ó podemos poner algo entre las palabras:
objeto.Passwd.value=N+’new’+A+NN
objeto.PasswdAgain.value=N+’new’+A+NN
La clave nueva sería:
JMnewBOEHME2pp2

NOTA: Yo nunca pongo una cuenta de correo alternativa, porqué cuando la pones ellos verifican cuantas cuentas tienen y al final no te permiten crear muchas cuentas de correo, te recomiendo que la crees y después con el tiempo si quieres le agregas la cuenta de correo alternativa.

NOTA2: Cuando pueda pondré un flash explicándolo mejor, lo que pasa es que ahora estoy en el trabajo y no me da tiempo…

Espero que a más de uno le funcione, a mi me funciona perfectamente, me ahorro por lo menos 1 minuto en cada cuenta, claramente las variables hay que modificarlas bien porqué sino no te va a funcionar como quieres.. Suerte..

NOTA3: Estoy en proceso de mejorar este sistema, pero como dije estoy en el trabajo… Suerte…


Seguir

Get every new post delivered to your Inbox.

Únete a otros 249 seguidores