Php y Ajax. Comunicación asíncrona con la base de datos.

 

Una de las técnicas usadas actualmente en el desarrollo de proyectos web es el de establecer comunicaciones asíncronas con el servidor web con el objetivo de reducir costos procesdador, memoria y por supuesto ancho de banda. Ajax, ha resultado ser el camino perfecto para conseguir comunicarnos con el servidor desde el navegador cliente con el servidor web sin que el usuario requiera enviar post o request al servidor-

En esta entrada veremos como podemos a través de ajax validar la existencia de un valor en nuestra base de datos.

El primer paso será crear la base de datos de prueba para el caso que en esta ocasión nos ocupa. Para ello ejecutaremos el siguiente script en nuestro servidor mysql

 

CREATE DATABASE pruebas;

DROP TABLE IF EXISTS pruebas.paises;

use pruebas;

CREATE TABLE `paises` (
`id` int(3) unsigned NOT NULL DEFAULT '0',
`Pais` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=22 DEFAULT CHARSET=latin1;

INSERT
INTO PRUEBAS.PAISES
(id,Pais)
vALUES(1,'México')

 

Ya que tenemos creada tanto la base de datos como la tabla y un registro a validar, el siguiente paso será crear un script en php responsable de validar si un determinado país existe en la tabla. El script sería el siguiente:

buscapais.php

<?php
  $Pais = isset($_GET['pais']) ? $_GET['pais']:"";
  mysql_connect("localhost", "root", "5urt1d0r");
  mysql_select_db("pruebas");
  $consulta=mysql_query("SELECT id, Pais FROM Paises WHERE Pais ='".$Pais."'");
  mysql_close();
  if ( mysql_num_rows($consulta) )
   echo "Encontrado"; 
?>


 

 

El segundo paso será crear el script de java para realizar las operaciones de comunicación con la base de datos. Y en este punto la comunicación será a través precisamente del script creado con php.

//función responsable de crear el objeto para comunicación asíncrona
function nuevoAjax() {
var xmlhttp=false;
try {
// Creacion del objeto AJAX para navegadores no IE
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e) {
try {
// Creacion del objet AJAX para IE
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(E) {
if (!xmlhttp && typeof XMLHttpRequest!='undefined')
xmlhttp=new XMLHttpRequest();
}
}
return xmlhttp;
}
function PaisExiste(pais) {
var existe= "";
var ajax=nuevoAjax();
ajax.open("GET", "buscapais.php?pais="+pais, false);
ajax.onreadystatechange=function() {
if (ajax.readyState==4)
existe=ajax.responseText;
}
ajax.send(null);
return existe;
}

function validapais() {
var pais = document.getElementById('val').value;
if (pais.length==0){
alert("Por favor escriba el nombre de un país");
document.getElementById('val').focus;
return false;
}
else {
var existe = PaisExiste(pais);
if (existe.indexOf("Encontrado", 0) == 0)
alert(pais + " ya se encuentra registrado");
else
alert(pais + " no ha sido registrado");
}
return false;

}

 

y por último crearemos la página web dónde haremos las pruebas:

 

 

Al dar click en la imagen de “Búsqueda” se invocará al script de java que a su vez invocará a través de get,  el script de php buscapais.php. Esto nos permitirá hacer consultas a mysql sin la necesidad de que el usuario deba hacer un reqest o post al servidor.

Para más detalle de esto puedes descargarte el código fuente de el área de descargas del foro: http://www.delphiaccess.com/forum/downloads/?sa=myfiles;u=18

Espero les sea de ayuda…

7 Comments

  1. Hola. No sé si me podrás ayudar en un problema que me trae de cabeza. Estoy intentando crear una sencilla app en html que envíe datos a una base de datos MySQL, a través de un formulario (donde hay 3 campos a rellenar por el usuario). Pero esta app (gracias a Phonegap) también me muestra las coordenadas del móvil, creado una variable que, lógicamente, depende de la posición. Y me gustaría enviar los datos de los 3 campos (que sí me aparecen en MySQL) y de las coordenadas (aquí está el problema: no se graban en la base de datos). ¿Podrías decirme donde está el problema?
    Puedes ver el código aquí: https://www.box.com/s/ifywsmxafp6c153x1kng
    Y aquí el archivo “conecta.php”: https://www.box.com/s/j5cqt7rskj7hrv1hshdi
    Mil gracias!!!

    • Hola amigo, disculpa la demora en responder. Generalmente respondo dudas en el foro de Delphi Access esto para que más colegas con un problema similar puedan aprovechar la base de conocimientos. ¿Será posible tratar allí tu duda? Saludos cordiales

  2. buenas tardes poliburro use el script pero no me funciona bien me dice que el pais no esta registrado aunque si este en realidad ya lo revise varias veces pero esta igual al tuyo crees que puedas revisar el codigo haber porque en realidad este es el mejor ejemplo de la comunicacion asincronica con ajax que he encontrado. gracias

Deja un comentario