¿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/


Crear una versión móvil de tu website solo usando Media Queries (CSS)

Lo primero de todo es conocer un poco el uso de Media Queries en general, aquí hay una buena información que debería ser leída por todos los que son Desarrolladores ó Diseñadores WEB.

Para que nos funcione simplemente usaremos la etiqueta(tag) Link y la propiedad media con el Query en cuestión.

1- Ejemplo:
<link rel=”stylesheet” type=”text/css” href=”screen480.css” media=”screen and (min-width: 480px)” />

El Ejemplo 1 será útil para cualquier pantalla que tenga la resolución de un tamaño mayor a 480px.

2- Ejemplo:
<link rel=”stylesheet” type=”text/css” href=”screen.css” media=”screen and (min-width: 480px) and (max-width: 768px)“/>

El Ejemplo 2 aplicará como el Ejemplo 1 pero en este caso se restringue a resoluciones no mayores de 768px.

3- Ejemplo:
<link rel=”stylesheet” type=”text/css” href=”moviles.css” media=”handheld” />

En este 3er ejemplo no estamos usando un tamaño definido de pantalla sino más bien un tipo de dispositivo, en este caso tenemos el handheld, pero existen varios tipos entre ellos tenemos:

  • all Used for all media type devices
  • aural Used for speech and sound synthesizers
  • braille Used for braille tactile feedback devices
  • embossed Used for paged braille printers
  • handheld Used for small or handheld devices
  • print Used for printers
  • projection Used for projected presentations, like slides
  • screen Used for computer screens
  • tty Used for media using a fixed-pitch character grid, like teletypes and terminals
  • tv Used for television-type devices

Existe un problema con algunos dispositivos, sobre todo con Iphone.
Cuando creas tu css para utilizar en el iphone, en este caso 320px(viewport)-480px(landscape) verás que realmente el tamaño de la pantalla es 980px, aunque hayas definido el css anterior no lo tomaría en cuenta por 2 razones:

  • La pantalla por defecto en el Safari es 980px
  • Si está en viewport la pantalla es 320px y nosotros hemos definido “mayor de 480px

Tenemos que hacer 2 cosas:

  • Introducir este meta en nuestra página:
    <meta name=”viewport” content=”width=device-width, initial-scale=1, maximum-scale=1″>
  • Modificar o crear un nuevo CSS indicando el tamaño que sea para un width menor de 481px.

El meta tag hará que el dispositivo tome el tamaño más grande con referencia a la pantalla(screen), con lo que veremos que al estar en landscape veremos el tamaño a 480px y cuando estemos en viewport estará en 320px.


YouTube estrena nueva interface, emulando un poco a la app de Facebook para iphone/ipad

Youtube.com esta estrenando nueva interface, y realmente quienes usamos iphone/ipad nos damos cuenta al instante que su parecido con la app de facebook para ios es innegable.


Instalando Django Framework

Lo prometido es deuda y este es nuestro primer post sobre Django Framework

Instalando Django Framework

Lo que necesitamos tener:

Diria que lo unico que necesitamos para poder instalar Django es python, pero igual necesitamos algún motor de base de datos, pero como posiblemente usted venga de otros lenguajes como PHP, entonces, ya debe tener instalado Mysql, Mysqli o cualquier otro (PostgreSQL,Oracle), por ello nos centraremos solo en la instalacion de Django y en una entrega proxima veremos como instalar Mysqldb para tener acceso a mysql. Leer el resto de esta entrada »


Como conectar a multiples bases de datos con CodeIgniter

Basado en un comentaro de Rene Olivo en el grupo de Deverlopers Do en el cual decia que tenia problemas para conectar con dos base de datos, me he motivado a escribir este tutorial.

El archivo a editar para tener nuestra configuracion es el database.php y esta localizado en  ”application/config/database.php“, dicho esto, los cambios son super sencillos:

Nuestra primera base de datos:
Leer el resto de esta entrada »


Encuesta: Cual lenguaje piensas aprender ahora?


De 90′s: Intermission Piece Of My Heart

Take this piece of my heart
And you’ll find my love
Take this piece of my heart
And you know that you have me
Take this piece of my heart
But be careful with what you’ve done
Take this piece of my heart
And I’ll love you endlessly

Ice cold. That’s how you came
………..
When you call my name
Slowly I can feel the pain
Oh yeah I think I’m gone insane
Deep deep down hold a call
Hit me to every side of a wall
Teardrop oh in my eye
You laugh
And I start to cry
Tryin’ to hold me
Lie you told me
Using, abusing
Now you stall me
Stop! And slow it down girl
Oh I won’t be around
Let’s just keep this things together
Hold and last forever ever
Take it here right from the start
Yo! Take this piece of my heart

Take a little piece of my heart
Destroy and kill and tear it apart
Love is all I got to give
Here’s a kind of life I live
Thinking about you, crying about you
Girl you got me thinking about you
Memories right here in my brain
And I can never forget the pain
That I had. Feeling bad
Losing girl of my life. Sad
Oh no. That’s not the way
…………… don’t play
I’m keeping you and not mistreat’n you
But teach you the things to do
And if ever we should fall apart
Yo! Take this piece of my heart


Local: La Democracia – Victor Victor y Gnomico

gracias Narda


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 »


Facebook introduce herramienta para traduccion instantanea

Facebook cada dia implementa alguna buena herramienta (opcion) para los usuarios, y no esta mal, esta vez es la traduccion instantanea de algun comentario, hasta el momento solo funciona en FanPages, pero me sabemos que con el tiempo se podra utilizar en los comentarios normales.

Si eres administrador de un Facebook FanPage para activar la opcion de traduccion: Edit Page -> Your Settings -> Admin, community and machine translators


Nuevos articulos sobre el desarrollo utilizando Django Framework

Django Framework

Django Framework logo

Desde hace un tiempo vengo trabajando con uno de los mejores web frameworks que pueden existir, y hablo exactamente de Django, un framework para python el cual puedo decir que hace magia.

Mantenganse en sintonia, que se esta cocinando el contenido :)


No el blog no esta abandonado.

Pues eso, se que tengo tiempo que no actualizo el blog, y las razones son … trabajo, lectura, nuevos conocimientos, en fin, es que estoy enfocado en estos ultimos dias a publicar mas cosas en mi blog como desarrollador web y como este blog es para “ocurrencias”, pues esta menos actualizado, pero no se preocupen que ya estoy :D


EL BLOG ESTA AHORA EN OTRO LUGAR

Pues una vez habia perdido mi dominio, igual tambien perdi el asinox.com, pero luego de eso tambien dejer perder el otro, asinox.net, pero ahora ya esta en mis manos nuevamente, asi que PARA MANTENERSE ACTUALIZADOS POR FAVOR …AHOR TODO ESTA EN ASINOX.NET

Saludos


CodeIgniter…

Debido a que cada dia tengo mas retos y me encuentro con algunas cosas “raras”, o no diria raras, pero si con algunos detallitos que en algun momento me han hecho parar mientras desarollo con CI, he decidido ir dejando tutoriales pequeños de como trabajar con CodeIgniter y de vez en cuando algunos tits, de esos que se aprenden en la marcha, asi que espero sacar unos minutos de cada dia para dejar algo nuevo sobre CI.

Saludos


Autoback up en Fireworks CS4

Ahora que tenemos nuevas herramientas, en este caso Adobe Fireworks CS4, pues, tenemos mucho que actualizar, estudiar la nueva interface, las nuevas herramientas y muchas cosas mas, pero en este momento quiero dar a conocer, para los que aun no saben de este Addon para Adobe Fireworks CS4, AutoBackUP, asi es, algo que nos salvara la vida (digo a los que trabajamos en Santo Domingo, donde la energia electrica es autonoma).

 

AutoBackUp en Fireworks CS4

AutoBackUp en Fireworks CS4

Click en la imagen para descargar.


Iphone por fin en Santo Domingo

Como se habia escuchado sobre el iphone via Claro, que este jueves empezaria a estar disponible dicho telefono 3G en Santo Domingo (via Claro), pues aqui esta, y lo primero que hizo claro fue publicar sus planes, que para mi son pesimos, ya que mi interes no es hablar por el telefono, es usar la transferencia de Datos, los cuales son muy pocos (22 MB) y el costo por Mega adicionar es de RD$ 2.50 pesos.

Pero igual…aun no quiero salir de ni ipodtouch…ta nuevo :(

 

Iphone Santo Domingo

Iphone Santo Domingo


Lo que le pasa a quien cree que ta seguro de su mujer

ajjajaja, yo me rio y es que , ejej por creer en estar seguro de tener algo o en alguien…jeejje


Las tipografias y el Stop motion….

http://vimeo.com/moogaloop.swf?clip_id=1891426&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1
Obama ’08 – Vote For Hope from MC Yogi on Vimeo.


Fecha para el Curso PHP & MySQL

Ya tenemos fecha para el curso, el cual empieza en el mes de noviembre , sabados de 2-6 y domingo de 1-9

Cualquier informacion extra: asinox@gmail.com


Curso PHP & MySQL Basico

En el mes de noviembre, empezare a dar un curso basico de PHP & MySQL, el cual sera impartido los fines de semana, sabados de 2 – 6 pm y domingos de 9-1 pm.

Los interesados favor comunicarse via email : asinox@gmail.com


Seguir

Get every new post delivered to your Inbox.

Únete a otros 249 seguidores