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


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


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


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


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 de PHP & Mysql básico

Las personas que quieran tomar un curso sobre PHP & Myslq básico, por favor dejarme saber via los comentarios  y les estare  informando cuando empezara y donde, hasta ahora la fecha inicial es en noviembre, posiblemente 7 de noviembre, el curso sera de 5 horas diarias durante 5 dias, un total de 25 horas.

Algun interesado comunicarse via los comentarios.


Ahora en : Zend Framework + Smarty + web 2.0

Luego de probar y decir que CodeIgniter es mi Framework para desarrollo, sigo manteniendo ese pensar, aunque me he comprado un libro super interesante ” Practical Web 2.0 Applications with PHP”, y es que de interesante tiene todo, aunque claro, no pense que tendria que mirar nada de Smarty ni ZF, pero para mi leer es tan importante como respirar, asi que he empezado a leer el libro sin nacer nada de lo que dice en la pc.

Ahora Smarty me parecia un poco “raro”, pero veo que hay ventajas para usar Smarty como Template Enginer, bien, ahora a comprar un libro de Smarty.

De igual forma ZF comparado con CI es muy engorroso, claro esta, CI viene a sustituir eso, lo dificil de algunos Frameworks, pero de igual forma ahora es tiempo de mirar Zend, que comparado con CI pesa 31.MB  en zip, mientras que CI menos de  < 1 MB.

Igual el ambiente esta preparado para Zend asi como para Smarty y Zend Studio (version prueba), y claro no olvidar la parte mas interesnate de todo esto Prototype y Scriptaculous lo que me dara el toque 2.0 a todo lo que esta en el libro.

Manos a la obra y pronto comentarios al respecto.


No mas IE 6

Y es que me canse de tener siempre que hacer fix para IE6,  he dicho stop a tener que hacer algo para que renderize bien en IE6….. lo siento, ahora hare uso de JS para detectar la version del IE, si no esta disponible el IE7 o superior…. descarguelo.


Instalacion de CodeIgniter

Pues como dije en el post, me he mudado para CodeIgniter y es que, las ventajas son muchas, de las cuales solo puedo mencionar la mas importante: Extensa documentacion, con ejemplos claros y reales, y es que la documentacion es el corazon de todas las aplicaciones, cosa que muchos de los demas Frameworks no tienen y si la tienen, es muy engorrosa.

INSTALANDO CODEIGNITER

1.- Descargar la version mas actual de codeigniter : codeigniter.com, hasta este momento es la version 1.6.3. (menos de 1MB) :D

2.- Descomprimir, navegar dentro de la carpeta CodeIgniter_1.6.3\CodeIgniter_1.6.3, allí existen 4 archivos (dos directorios y dos archivos), system, user_guide, index.php, licence.txt.

3.- Imaginando que ya tienes instaladon un paquete bajo window de apache, php y mysql, yo utilizo WampServer. Lo siguiente es crear una caperta en tu document root (en mi caso esta en E: WAMP/WWW), alli dentro de WWW crear una carpeta llamada CI o CodeIgniter (en verdad como gustes), y copiar los 4 archivos en contrados dentro de CodeIgniter_1.6.3\CodeIgniter_1.6.3 [system, user_guide, index.php, licence.txt].

4.- luego de eso, creo que estamos listo para dar una mirada al http://locahost/ci

En la proxima entrega… como configurar CI para empezar nuestra propia aplicacion.


nooooooooooooooo no no noooooooo

jej e que no puede serrrrrrrr, jejej por Dios , jeje yo lo voy a poner aqui pa ver si alguien opina igual que yo, jeje pero que verguenzaaaaaaaaaa jeje


Vota por este blog

vota po este blog

vota po este blog


Y finalmente me mude para CodeIgniter

¿Qué es CodeIgniter?

CodeIgniter (CI) es un poderoso Framework PHP con una pequeña guia que nos detalla cada funcion del framework y como debemos usarla, esta construido para programadores PHP quienes necesitan un simple y elegante herramienta para crear aplicaciones completamente funcionales. Si eres web developer quien esta cansado de escribir tantas lineas de codigo y cansado de buscar y probar Frameworks los cuales no traen una buena guia para su utilizacion te recomiendo que pruebes CodeIgniter.


Seguir

Get every new post delivered to your Inbox.

Únete a otros 249 seguidores