Ver Mensaje Individual
  #7 (permalink)  
Antiguo 08/12/2016, 13:20
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Recibir parámetro en la misma página

No es nada complicado. Solo tienes que utilizar una instancia del objeto XMLHttpRequest y sus métodos para hacer la petición asíncrona, recibir la respuesta y procesarla.

Un ejemplo:

Archivo 1:
Código HTML:
Ver original
  1. <form id="buscador" action="clientes.php" method="get">
  2.     <label>Ingrese el nombre del cliente:</label>
  3.     <input type="text" name="nombreCli" />
  4.     <input type="submit" value="Buscar" />
  5. </form>
  6.  
  7. <section id="clientes"></section>
Código Javascript:
Ver original
  1. var formulario = document.querySelector("#buscador"), //El formulario
  2.     input = document.querySelector("[name=nombreCli]"), //La caja de texto
  3.     listado = document.querySelector("#clientes"); //La sección para mostrar los resultados
  4.  
  5. formulario.addEventListener("submit", function(event){
  6.     event.preventDefault(); //Cancelamos el envío
  7.  
  8.     var ajax = new XMLHttpRequest(), //Creamos una instancia del objeto XMLHttpRequest
  9.         metodo = this.method, //El método HTTP de envío será el establecido en el formulario
  10.         ruta = this.action + "?nombre=" + input.value, //El destino será el establecido en el formulario y se adjuntará una cadena de consulta con el valor escrito en la caja de texto
  11.         asincrono = true; //La petición será asíncrona
  12.  
  13.     ajax.open(metodo, ruta, asincrono); //Establecemos los parámetros para iniciar la petición
  14.     ajax.addEventListener("load", function(){ //Ejecutamos acciones cuando se complete la petición
  15.         if (this.status == 200){ //Si la petición se completó exitosamente
  16.             listado.innerHTML = this.responseText; //Se muestra el resultado en la sección
  17.         }
  18.     }, false);
  19.     ajax.send(); //Se inicia la petición
  20. }, false);

Archivo 2 (clientes.php):
Código PHP:
Ver original
  1. $conexion = new mysqli('server', 'user', 'password', 'database');
  2.  
  3. if ($conexion->connect_errno) exit($conexion->connect_errno . ': ' . $conexion->connect_error);
  4. $nombre = $conexion->real_escape_string(strip_tags(trim($_GET['nombre'])));
  5. $consulta = "SELECT cli_nombre, cli_documento, cli_domicilio FROM tbl_clientes WHERE cli_nombre LIKE '%$nombre%'";
  6. $resultados = $conexion->query($query) or exit($conexion->errno . ': ' . $conexion->error);
  7.  
  8. if ($resultados->num_rows){
  9.     while ($filas = $resultados->fetch_assoc()){
  10.         echo <<<FdW
  11.             <ul>
  12.                 <li>Nombre: {$filas['cli_nombre']}</li>
  13.                 <li>N° de documento: {$filas['cli_documento']}</li>
  14.                 <li>Domicilio: {$filas['cli_domicilio']}</li>
  15.             </ul>
  16. FdW;
  17.     }
  18.     $resultados->free();
  19. }
  20. else{
  21.     echo 'No se encontraron coincidencias en la búsqueda';
  22. }
  23.  
  24. $conexion->close();

En el primer archivo, tenemos un formulario con el cual se puede buscar uno o varios datos de clientes ―almacenados en una base de datos― cuyo nombre coincida o su estructura sea similar al que el usuario haya escrito en la caja de texto del formulario de búsqueda. Al momento de lanzar la búsqueda, se cancela el envío normal ―que implica recargar la ventana― y se realizan las acciones para iniciar la petición asíncrona. Una vez que se obtiene una respuesta, esta se muestra en un elemento HTML; en este caso, un elemento <section>.

En el segundo archivo, se realiza la conexión a la base de datos, se realiza la búsqueda y, si se encuentran coincidencias, se imprimen. Dicha impresión de datos será la respuesta que se devolverá al primer archivo.

Este es un ejemplo de una petición asíncrona básica utilizando un método de envío HTTP constructor, como lo es GET. Con otros métodos, como POST, DELETE o PUT, es necesario modificar las cabeceras, además de que, los datos a enviar, se colocan como argumento del método .send(), alineados en una cadena de consulta.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand