Pages

lunes, agosto 26, 2013

Transferir variables o datos entre dos HTML, Obtener parametros pasados por GET en HTML

¿Cómo llamar de un HTML a otro enviando informacion y recibirla del otro lado?.


Generalmente uno envía información entre un html y un PHP, por ejemplo, o al lenguaje de servidor que mas les guste. Pero en este caso necesitaba servir una pagina desde PHP y no utilizar un motor de plantillas para reemplazar valores, Envié entonces un header del tipo
"header ('Location: pp.html?parametro='.$variable)", dentro del html, utilice esta funcion para leer este primer parametro que es el valor que me interesaba y transferirlo a una variable de formulario:

function leerGets() {
  var parameters = location.search.substring(1).split("&");
  var temp = parameters[0].split("=");
  document.getElementById("campo").value = unescape(temp[1]);
}
 
Vamos por partes:
 
location.search.substring(1) 

El objeto location, contiene la dirección escrita en el explorador. La propiedad search del objeto contiene el query string. Es decir que suponiendo que la direccion completa fue: http://pp.htm?parametro=xxx&param2=yyy
location.search devolvería ?parametro=xxx&param2=yyy . Al agregarle el método substring con un "1" como parámetro, cortamos el primer caracter de la cadena, en este caso el "?"
 
var parameters = location.search.substring(1).split("&")

al resultado del query string lo dividimos con la funcion split en un array de pares de valores separados por el caracter "&" y lo asignamos a una variable, en este caso parameters.
 
var temp = parameters[0].split("=");

Ahora tomamos el primer conjunto de parametro=valor (es el que me interesa a mi, aunque bien podríamos haber recorrido todo el query string) y lo volvemos a dividir pero en este caso por el carácter "=".
Es decir. parameters[0] contiene "parametro=xxx" ahora tendre un array "temp" que contendra temp[0] = "parametro" y temp[1] = "xxx".
 
document.getElementById("campo").value = unescape(temp[1]);

asignamos el valor a una variable de formulario con id="campo".
unescape(valor) me permite sacar los caracteres de codificación del query string. si por ejemplo, parámetro hubiese contenido espacios entonces habría llegado con un formato parecido a este parametro=Juan%20Perez.

Listo!. Espero que sirva.

Agregado mas tarde...

Y ya que estamos amplio la función y la convierto en algo mucho mas útil.

 
function leerGets() {
  var gets = {}; temp=[];
  var parameters = location.search.substring(1).split("&");

  parameters.forEach(function(entrada) {
              temp = entrada.split("=");
              gets[temp[0]] = unescape(temp[1]);
  });
  return gets;
}

martes, agosto 07, 2012

JSONP - Cross Domain AJAX, Ejemplo con jQuery y PHP

Si ud. como yo, es un pobre programador que ha intentado hacer alguna aplicacion para telefonos Android y tuvo la peregrina idea de hacer que el telefono tenga la logica de su lado y se comunique via Ajax con su servidor... Entonces esta entrada se la dedico desde el fondo de mi corazón.

Después de mucho deambular leyendo un montón de incoherencias llegué a un post que me mostró la luz. http://bob.ippoli.to/archives/2005/12/05/remote-json-jsonp/
De ahí en mas avancé y aqui van mis conclusiones.

1) llamada ajax en javascript con jQuery:

$.ajax({
 dataType: "jsonp",
 url: "http://algunotrodominio.com/unscript.php",
 data: "parametro1=valor1&parametro2=valor2",
 type: GET,
 crossDomain: true,
 jsonpCallback:'jpCallback',
 success: function(jsondata) {   
  datos = jsondata[0].respuesta.datos;
  otros = jsondata[0].respuesta.otracosa;
  (hacer algo con todo esto.)
 },
 error: function (jqXHR, textStatus, errorThrown) {
   (haceralgo)
 }
});

jpCallback(jsondata){
  (pueden ejecutar alguna validación previa con los datos,
 o no hacer absolutamente nada.)
} 

2) unscript.php :
<?php

$json = '{ "respuesta": {
   "datos": [ 
              {"codigo": 1, "dato": "algo1"},
              {"codigo": 2, "dato": "algo2"}
            ],
   "otracosa":"undatomasadevolver"  
   }   
}';
  
echo 'jpCallback(['.$json.'])';
?> 

Y eso es todo. Si no lo captaron: al $.ajax() de jQuery modifican el dataType a "jsonp", esto solo ya habilita a hacer una llamada cross domain. pero hay un parametro mas crossDomain : true. Sin esto tambien funciona. jsonpCallback : 'nombredefuncioncallback' Al decir que esto es "jsonp" jQuery agrega 2 parametros a la cadena de datos que se envian por ejemplo:

http://algunotrodominio.com/unscript.php?callback=jQuery17206061169685839634_1344380380503&parametro1=valor1&parametro2=valor2&_=1344380387364

si en cambio agregamos el parametro jsonpCallback : 'funcioncallback' entonces la llamada se parecera a esto:

http://algunotrodominio.com/unscript.php?callback=funcioncallback&parametro1=valor1&parametro2=valor2&_=1344380387364

Como sea lo importante es que la devolucion del script PHP debe ser el nombre de la funcion callback y como parametro de la funcion el JSON que quiero devolver. jQuery ejecuta entonces la funcion callback y luego al success: envia solo el objeto JSON. En el ejemplo muestro como acceder a los distintos componentes.

Espero que les sea útil.

viernes, julio 27, 2012

FIREBIRD: Convertir un Unix timestamp, equivalente a MYSQL FROM_UNIXTIME()

En teoría los Unix timestamp, son los segundos transcurridos desde la medianoche del primero de enero de 1970, en MySQL hay dos funciones para manejar estos timestamps FROM_UNIXTIME() y UNIX_TIMESTAMP(). Ahora, dentro del mismo MySQL la conversión entre ambas funciones no es exacta, debido (segun entendí) a las diferencias locales según la zona horaria desde donde se trabaje... O sea, no pidan demasiada precisión muchachos que esto no es una ciencia exacta!!!.
Como sea el bueno de Firebird (la base de datos con la que habitualmente trabajo) no tienen contemplado esto asi que para obtener una fecha legible a partir de un Unix timestamp yo hice esto:

select dateadd(second, 1255033470, cast('01/01/1970 00:00:00.0000' as timestamp)) 
from rdb$database;

Por ahora sirve a mis propositos, si logro entender como hacer jugar los problemas de ubicación lo mejoro. Si alguien tiene alguna mejor idea soy todo ojos!.

viernes, junio 08, 2012

Mis Repositorios Imprescindibles de UBUNTU

Ultima versión del FFmpeg (Conversor de video)
Comando apt:
ppa:jon-severinsson/ffmpeg
__________________________________________________________________________

Este muchacho Adrian Mariuz Popa, mantiene un repositorio con las ultimas versiones de Firebird actualizadas y su respectivo php-interbase!!
Comando apt:
ppa:mapopa/ppa
__________________________________________________________________________

Un tema de iconos muy bueno Gartoon Redux
Comando apt:
ppa:tweenk/ppa
__________________________________________________________________________

Como Ubuntu da para todo existe un Ubutnu SE donde SE significa "Satanic Edition", que viene a ser una boludez con una estética particular, pero, estos pibes mantienen actualizado un tema de iconos que para mi es por lejos el mejor que existe: Buuf Icons, asi que a incluir el repositorio que se acaba el mundo. Están desactualizados, pero solo me interesa mantener actualizado el paquete de iconos buuf.
Comando apt:
deb http://ubuntusatanic.org/hell oneiric main
Secure Key: 
wget -q http://ubuntusatanic.org/ubuntu-se-key.gpg -O- | sudo apt-key add -
__________________________________________________________________________

Los amigos de Google mantienen un repositorio para todas sus cada vez mas inevitables apps.
Comando apt:
deb http://dl.google.com/linux/talkplugin/deb/ stable main
Secure Key:
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
__________________________________________________________________________

Wine, como olvidarlo.
Comando apt:
ppa:ubuntu-wine/ppa
__________________________________________________________________________

Medibuntu, hasta la fecha siguen manteniendo los non-free codecs, la libreria libdvdcss2 para realizar copias de DVD originales y el mencoder un conversor de video alternativo al ffmpeg y para mi el mejor para convertir avi a divx
Comando apt:
sudo -E wget --output-document=/etc/apt/sources.list.d/medibuntu.list http://www.medibuntu.org/sources.list.d/$(lsb_release -cs).list && sudo apt-get --quiet update && sudo apt-get --yes --quiet --allow-unauthenticated install medibuntu-keyring && sudo apt-get --quiet update
__________________________________________________________________________

Jdownloader, un gran administrador de descargas, hoy por hoy un tanto en desuso al caer megaupload, pero igualmente sirve.
Comando apt:
ppa:jd-team/jdownloader
__________________________________________________________________________

Geany, por escandalo el mejor editor para PHP, Javascript y HTML en general. Si no lo conocen, pruebenlo. Y despues me cuentan.
Comando apt:
ppa:geany-dev/ppa
__________________________________________________________________________

Kazam Screencaster. Un "screencaster" es una aplicación que sirve para grabar en video lo que se hace en el escritorio. Muy útil para realizar manuales. En este caso, la aplicación anda muy bien.
Comando apt:
ppa:kazam-team/stable-series
__________________________________________________________________________

lunes, marzo 26, 2012

Configuración Internet APN CLARO ARGENTINA

En el escritorio del teléfono hacemos click en el botón de opciones -> Ajustes -> Conex. Inalámbricas y Redes -> Redes Móviles -> Nombre de puntos de acceso -> (Botón de opciones)-> Nuevo APN

NOMBRE: Claro AR
APN: internet.ctimovil.com.ar
Proxy: nada
Puerto: nada
NOMBRE DE USUARIO: ctigprs
CONTRASEÑA: ctigprs999
SERVIDOR: nada
MMSC: nada
PROXY MMS: nada
PUERTO MMS: nada
MCC: 722
MNC: 310
TIPO DE AUTENTICACION: PAP (muy importante poner esto asi)
TIPO DE APN: default,dun

Anda espectacular. Después de mucho recorrer lo encontré aquí: http://www.grupoandroid.com/topic/32939-solucion-apn-claro-ar/

Actualización 13/08/2012:
Anda dando vueltas otro APN, anda muy bien, ahi van los datos:

NOMBRE: ba.amx
APN: ba.amx
Proxy: nada
Puerto: nada
NOMBRE DE USUARIO: clarogprs
CONTRASEÑA: clarogprs999
SERVIDOR: nada
MMSC: nada
PROXY MMS: nada
PUERTO MMS: nada
MCC: 722
MNC: 310
TIPO DE AUTENTICACION: PAP (muy importante poner esto asi)
TIPO DE APN: default,dun

Actualización 5/11/2012:
NOMBRE: Claro AR
APN: igprs.claro.com.ar
Proxy: nada
Puerto: nada
NOMBRE DE USUARIO: ctigprs
CONTRASEÑA: ctigprs999
SERVIDOR: nada
MMSC: nada
PROXY MMS: nada
PUERTO MMS: nada
MCC: 722
MNC: 310
TIPO DE AUTENTICACION: PAP (muy importante poner esto asi)
TIPO DE APN: default,supl


Es el que me viene por defecto en el Samsung Galaxy S3 y está andando perfectamente bien. De hecho intenté utilizar el ba.amx y me dejo de recibir mensajes MMS. Ojalá les sirva.

Saludos!