msgbartop
Tips de administración de servidores y herramientas Web
msgbarbottom

Ejecutar javascript cargado por ajax

diciembre 13, 2010 Publicado en Admin-tips, Dia a Dia, JavaScript, Tecnología con Comentarios desactivados


Muchas veces tenemos queremos cargar por ajax una pagina o servicio y ejecutar un código javascript que viene en la respuesta, debido a que la respuesta del ajax es simple texto, esto no es posible de manera natural. Por tal razón es necesario parsear el código javascript de la respuesta y adicionarlo al elemento <HEAD> del documento, para poder utilizarlo posteriormente.

Vamos a ver esto por medio de un ejemplo donde cargamos por ajax una página que se encarga de actualizar la información de un div por medio de javascript. Se que esto se puede hacer directamente, simplemente es para efectos de demostrar como se haria.

La siguiente es la respuesta que devuelve la página que es llamada por ajax:

<div id="ajax-js">
Este div se cargará por medio de AJAX y despues se actualizara 
desde una función que esta en esta misma respuesta
</div>
<script type="text/javascript">
document.getElementById("ajax-js").innerHTML = "Ya fui actualizado desde JS";
</script>

Ahora en la página donde hacemos el llamado ajax es necesario colocar la función que se encargara de hacer el parseo de la respuesta, y hacer el llamado a la función una vez la página se ha cargado en su totalidad:

<script>
 
 function runJS() 
{ 
 
    var search = CONTENIDO DE LA RESPUESTA AJAX;
    var script;
 
    while( script = search.match(/(<script[^>]+javascript[^>]+>\s*(<!--)?)/i)) 
    { 
      search = search.substr(search.indexOf(RegExp.$1) + RegExp.$1.length); 
 
      if (!(endscript = search.match(/((-->)?\s*<\/script>)/))) break; 
 
      block = search.substr(0, search.indexOf(RegExp.$1)); 
      search = search.substring(block.length + RegExp.$1.length); 
 
      var oScript = document.createElement('script'); 
      oScript.text = block; 
      document.getElementsByTagName("head").item(0).appendChild(oScript); 
    } 
}
 
window.onload= function(){runJS();}
</script>

De esta manera lograremos ejecutar funciones o codigo Javascript que ha sido cargado mediante AJAX.

En el ejemplo anterior omiti el llamado ajax y la asignación de la respuesta a la función runJS, hay diferentes maneras de hacerlo, como por ejemplo con jquery, donde en el callback del ajax podemos ejecutar la función runJS de una manera mas pro, para una próxima entrada les mostrare como hacerlo.

Tags: , , , , , , , , , , , , ,

Jquery – AutoCompletar

agosto 10, 2010 Publicado en Admin-tips, JavaScript con 30 Comentarios


En días pasados tuve la necesidad de crear una interfaz web para redacción, donde a partir de un textbox y lo que ellos iban escribiendo, se hacia una consulta a la Base de Datos y les desplegaba unos terminos que contenian el texto hasta ese momento ingresado, para esto utilice jquery y jquery-ui (User Interface), realmente fue muy sencillo y a continuación les muestro los pasos necesarios.

Lo primero que debemos hacer es descargar las librerias de jquery-ui que nos permitirán usar la funcionalidad de autocompletar:

  • Ir a http://jqueryui.com/download
  • En la parte superior derecha hacer click en “Deselect all components” , lo cual dejara el listado limpio
  • En la sección de “Widgets” seleccionar “Autocomplete”, al hacer esto se seleccionarán las librerias necesarias para que el autocomplete funcione sin problemas
  • En la Barra de la Derecha seleccionar la versión 1.8.4 de jquery-ui, y hacer clic en Download
  • Desempaquetar el archivo en una carpeta llamada jquery

Aqui ya tenemos las librerias necesarias para hacer nuestro autocompletar por medio de javascript.

Ahora creamos una página html cualquiera y la modificamos para incluir las librerias js y css antes descargadas, puede ser en el head o en el body del documento html:

<script src="../jquery/js/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="../jquery/js/jquery-ui-1.8.4.custom.min.js" type="text/javascript"></script>

Vamos a crear un textbox con id “palabra” que será el que utilizaremos para hacer el llamado al autocompletar, y dos campos de tipo oculto donde vamos a almacenar el id y el valor de la palabra que seleccionemos:

<input id="palabra" size="30" value='' >
<input type='hidden' id='palabraId' value='' >
<input type='hidden' id='palabraTexto' value='' >

Creamos la función que se va a encargar de hacer el llamado al script que trae las posibles opciones a partir del texto ingresado en el textbox:

<script type="text/javascript">
   $(function() {
   //Se encarga de ejecutar la función autocomplete de jqueryui
      $("#palabra").autocomplete({
         source: function(request, response) {
             //Llamado al script Search.php que devuelve arreglo JSON
             $.getJSON("/Search.php", {
                term: request.term
             }, response);
         },
         minLength: 2, //Numero de caracteres minimos
         //Cuando el usuario selecciona una opción asigna los valores a los campos ocultos
         select: function(event, ui) {
             $("#palabraId").val(ui.item.id);
             $("#palabraTexto").val(ui.item.value);
         },
      })
      //Función que se encarga de desplegar las opciones
      .data( "autocomplete" )._renderItem = function( ul, item ) {
          return $( "<li></li>" )
             .data( "item.autocomplete", item )
             .append( "<a>" + item.value + "</a>" )
             .appendTo( ul );
      };
   });
</script>
<style>
     //Asignamos un gif para mostrarle al cliente que se estan buscando opciones
    .ui-autocomplete-loading { background: url(../jquery/css/images/indicator.gif) no-repeat right; }
    #palabra{ width: 15em; }
</style>

El script Search.php debe devolver un arreglo de tipo JSON con las columnas “id” y “value” para que sean desplegadas como opciones en el textbox, aca les dejo un ejemplo de respuesta:

[{"id":711,"value":"Columnistas","total":0},{"id":600,"value":"Econom\u00eda","total":0},{"id":510,"value":"F\u00fatbol   Colombiano","total":0},{"id":100,"value":"Colombia","total":14},{"id":810,"value":"Telecomunicaciones","total":0},{"id":814,"value":"Consejos","total":0},{"id":1113,"value":"Ecolog\u00eda","total":0},{"id":1548,"value":"contenido","total":1},{"id":1562,"value":"Atl\u00e1ntico","total":4},{"id":1572,"value":"Puerto  Colombia","total":1},{"id":1576,"value":"Centro de  Convenciones","total":3}]

Esta es una imagen de como se veria el textbox en el momento en que se escriben dos caracteres:

Llamado a autocompletar al digitar 2 caracteres o más

despues en el momento de navegar con las flechas por las posibles opciones:

Selección de una de las opciones del autocompletar

En siguientes entradas les mostrare como acceder con jquery a las estructuras html, adicionar, modificar y eliminar entidades HTML.

Tags: , , , , , , ,

Google TV – El TV conoce Internet. Internet conoce al TV

junio 22, 2010 Publicado en Tecnología con 31 Comentarios


google TvGoogle TV es una nueva experiencia hecha para combinar la televisión que conoces y te gusta, con la libertad y el poder de Internet.

Lo que quiere google con google TV, es que tengamos la libertad de ver lo que queremos ver, cuando lo queremos ver y no cuando lo estan presentando en la televisión común, sin necesidad de ajustarnos a los horarios que establecen los canales.

Porque ahora buscar los videos de nuestros programas favoritos en google Tv y no en youtube por ejemplo?, sencillo, la pantalla de un computador no se compara con los centros de entreteniemiento que tenemos en nuestros hogares hoy en dia.

Google anuncia que los TVs más recientes lo van a traer de fabrica, pero tambien es posible disfrutar google Tv en cualquier televisor por medio de un adaptador.

A continuación un video que explica la apuesta de google ahora en el mercado de la televisión:

Tags: , , , , ,

Colombianos desarrollan pantalla que reconoce gestos

junio 21, 2010 Publicado en Tecnología con 37 Comentarios


Una empresa colombiana desarrolló unas pantallas que no requieren contacto ni ningún tipo de controles para manejarlas. A primera vista, se ve como lo que hace Kinect al reconocer gestos, pero aplicado a otro tipo de software que no es videojuegos.

Como el sitio web de la empresa Inter-Screen Technology no da muchos detalles de la tecnología, hablamos con Mario Darisic, gerente comercial de la empresa, quien nos explicó que se trata de “pantallas integrales de multimedia (Audio, Video, imágen estática, texto y botones de activación), que mediante reconocimiento del movimiento exclusivamente de las manos y en tiempo real puede ejecutar cualquier tipo de aplicación por eventos en entorno Windows, reconociendo y siendo posible implementar aplicativos desde flash hasta lenguaje máquina, c++, etc. mediante nuestra software de interfase”.

Las pantallas son plasmas de 50 pulgadas, aunque también se puede implementar sobre otro tipo de televisores (LCD o LED) de entre 29 y 60 pulgadas, que se pueden controlar desde 9 metros de distancia. La tecnología se basa en sensores y “a diferencia de la realidad aumentada no implica problemas de iluminación, no precisa de marcas o señalizadores y únicamente precisa una fuente de poder”.

Según explica Darisic, toda la tecnología fue desarrollada en Colombia, y la empresa está comercializando y arrendando estos equipos para distintos fines, como publicidad, promociones, turismo, etc. No nos especificaron precios, porque son variables de acuerdo a lo que pida el cliente, pero nos imaginamos que no debe ser muy barato.

El equipo será presentado durante Campus Party Colombia, así que quienes estén por allá tal vez tendrán la oportunidad de probarlo y contarnos qué tal funciona.

Tags: , , , , , , , , , , ,