Crear AJAX con PHP y JS

En este tutorial vamos a ver un ejemplo básico de como crear un ajax usando javascript y php

1. Primero creamos un archivo en php que calculará la edad a partir de los datos que se reciban por POST

enviardatos.php

<?php
function calcular_edad($fecha,$FechaNacimiento)
 {
  /* Obtengo los datos de dia, mes y año por separado */
  if (preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$fecha))
   list($dia1,$mes1,$ano1)=split("/",$fecha);
  if (preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/",$fecha))
   list($dia1,$mes1,$ano1)=split("-",$fecha);
  if (preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$FechaNacimiento))
   list($dia2,$mes2,$ano2)=split("/",$FechaNacimiento);
  if (preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/",$FechaNacimiento))
   list($dia2,$mes2,$ano2)=split("-",$FechaNacimiento);
  $dif = (mktime(0,0,0,$mes1,$dia1,$ano1) - mktime(0,0,0, $mes2,$dia2,$ano2)); 
  /* convierto segundos en días */
   $dif1 = $dif / (365 * 60 * 60 * 24); 
  /* obtengo el valor absoluto de los días quitando posibles signos negativos */
   $dif1 = abs($dif1);  
  /* quito los decimales */
   return floor($dif1);
 }
 //enviamos datos
 $Fecha = date('d/m/Y');
 echo 'Hola ' . $_POST['nombre'] . ' tienes en la actualidad: ' . calcular_edad($Fecha,$_POST['fnac']) . ' años';
?>

2. Ahora creamos un HTML con las funciones httpRequest y un formulario que enviará nombre y año de nacimiento, para solicitar la respuesta AJAX

ajax.html


<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Crear AJAX</title>
<script>
    // creamos el objeto XmlHttpRequest
    function httpRequest() {
		if (window.XMLHttpRequest) {
			return new XMLHttpRequest();
		} else if(window.ActiveXObject) {
			return new ActiveXObject("Microsoft.XMLHTTP");
		} else {
			console.log('No se puede crear objeto XmlHttpRequest.');
		}
	}
    // creamos el ajax
	ajax = function( ajustes ){
				var msRequest = httpRequest();
				var metodo = ajustes.metodo;
				var data = ajustes.data + '&time='+ new Date().getTime();
				var url = (metodo == 'GET') ? ajustes.url + '?' + data : ajustes.url;
				
				msRequest.open(metodo, url, true);
				if(typeof ajustes.contenidoTipo !== 'undefined') msRequest.setRequestHeader('Content-Type',ajustes.contenidoTipo);
				msRequest.onreadystatechange = function(){
													if (msRequest.readyState == 4 && msRequest.status == 200) {
														ajustes.suceso(msRequest.responseText);
													} else if ( msRequest.status == 200) {
														ajustes.suceso(msRequest.responseText);
													} else {
														ajustes.suceso(msRequest.status);
													}
												};															
				if(metodo == 'GET') {
					msRequest.send(null);
				}else{
					msRequest.send(data);
				}
		}
	// funcion para mostrar resultados en DIV contenedor
	function mostrarResultadosAjax(f){
		ajax({
			url: f.action,
			metodo: f.method,
			data: 'nombre='+f.nombre+'&fnac='+f.fnac,
			contenidoTipo: 'application/x-www-form-urlencoded',
			suceso: function(respuesta){
				document.querySelector('#contenedor').innerHTML=respuesta;
			}
		});
	}
</script>
</head>
<body>
	<form method="post" action="enviardatos.php" onSubmit="mostrarResultadosAjax(this);return false;">
		<div><input type="text" name="nombre" placeholder="Ingresa tu nombre"></div>
		<div><input type="text" name="fnac" placeholder="Ingresa el año en que naciste"></div>
		<div><button>Enviar</button></div>
	</form>
	<div id="contenedor"></div>
</body>
</html>

Comentarios