AJAX - Acción

Este capítulo le brinda una imagen clara de los pasos exactos del funcionamiento de AJAX.

Pasos de la operación AJAX

  • Ocurre un evento de cliente.
  • Se crea un objeto XMLHttpRequest.
  • El objeto XMLHttpRequest está configurado.
  • El objeto XMLHttpRequest realiza una solicitud asincrónica al servidor web.
  • El servidor web devuelve el resultado que contiene el documento XML.
  • El objeto XMLHttpRequest llama a la función callback () y procesa el resultado.
  • El DOM HTML se actualiza.

Tomemos estos pasos uno por uno.

Ocurre un evento de cliente

  • Se llama a una función de JavaScript como resultado de un evento.

  • Ejemplo: la función de JavaScript validateUserId () se asigna como un controlador de eventos a un evento onkeyup en el campo de formulario de entrada cuya identificación se establece en "userid"

  • <input type = "text" size = "20" id = "userid" name = "id" onkeyup = "validateUserId ();">.

Se crea el objeto XMLHttpRequest

var ajaxRequest;  // The variable that makes Ajax possible!
function ajaxFunction() {
   try {
      // Opera 8.0+, Firefox, Safari
      ajaxRequest = new XMLHttpRequest();
   } catch (e) {
   
      // Internet Explorer Browsers
      try {
         ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
      
         try {
            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
         } catch (e) {
      
            // Something went wrong
            alert("Your browser broke!");
            return false;
         }
      }
   }
}

El objeto XMLHttpRequest está configurado

En este paso, escribiremos una función que será activada por el evento del cliente y se registrará una función de devolución de llamada processRequest ().

function validateUserId() {
   ajaxFunction();
   
   // Here processRequest() is the callback function.
   ajaxRequest.onreadystatechange = processRequest;
   
   if (!target) target = document.getElementById("userid");
   var url = "validate?id=" + escape(target.value);
   
   ajaxRequest.open("GET", url, true);
   ajaxRequest.send(null);
}

Realización de solicitudes asincrónicas al servidor web

El código fuente está disponible en el código anterior. El código escrito en negrita es responsable de realizar una solicitud al servidor web. Todo esto se hace utilizando el objeto XMLHttpRequest ajaxRequest .

function validateUserId() {
   ajaxFunction();
   
   // Here processRequest() is the callback function.
   ajaxRequest.onreadystatechange = processRequest;
   
   if (!target) target = document.getElementById("userid"); var url = "validate?id = " + escape(target.value); ajaxRequest.open("GET", url, true); ajaxRequest.send(null);
}

Suponga que ingresa Zara en el cuadro de ID de usuario, luego, en la solicitud anterior, la URL se establece en "validate? Id = Zara".

El servidor web devuelve el resultado que contiene el documento XML

Puede implementar su script del lado del servidor en cualquier idioma, sin embargo, su lógica debería ser la siguiente.

  • Obtenga una solicitud del cliente.
  • Analice la entrada del cliente.
  • Realice el procesamiento requerido.
  • Envíe la salida al cliente.

Si asumimos que va a escribir un servlet, aquí está el fragmento de código.

public void doGet(HttpServletRequest request,
   HttpServletResponse response) throws IOException, ServletException {
   String targetId = request.getParameter("id");
   
   if ((targetId != null) && !accounts.containsKey(targetId.trim())) {
      response.setContentType("text/xml");
      response.setHeader("Cache-Control", "no-cache");
      response.getWriter().write("<valid>true</valid>");
   } else {
      response.setContentType("text/xml");
      response.setHeader("Cache-Control", "no-cache");
      response.getWriter().write("<valid>false</valid>");
   }
}

Se llama a la función de devolución de llamada processRequest ()

El objeto XMLHttpRequest se configuró para llamar a la función processRequest () cuando hay un cambio de estado en readyState del objeto XMLHttpRequest . Ahora esta función recibirá el resultado del servidor y realizará el procesamiento requerido. Como en el siguiente ejemplo, establece un mensaje de variable en verdadero o falso en función del valor devuelto por el servidor web.

function processRequest() {
   if (req.readyState == 4) {
      if (req.status == 200) {
         var message = ...;
...
}

El DOM HTML está actualizado

Este es el paso final y en este paso, se actualizará su página HTML. Sucede de la siguiente manera:

  • JavaScript obtiene una referencia a cualquier elemento en una página usando DOM API.
  • La forma recomendada de obtener una referencia a un elemento es llamar.
document.getElementById("userIdMessage"), 
// where "userIdMessage" is the ID attribute 
// of an element appearing in the HTML document
  • Ahora se puede usar JavaScript para modificar los atributos del elemento; modificar las propiedades de estilo del elemento; o agregar, eliminar o modificar los elementos secundarios. Aquí hay un ejemplo:

<script type = "text/javascript">
   <!--
   function setMessageUsingDOM(message) {
      var userMessageElement = document.getElementById("userIdMessage");
      var messageText;
      
      if (message == "false") {
         userMessageElement.style.color = "red";
         messageText = "Invalid User Id";
      } else {
         userMessageElement.style.color = "green";
         messageText = "Valid User Id";
      }
      
      var messageBody = document.createTextNode(messageText);
      
      // if the messageBody element has been created simple 
      // replace it otherwise append the new element
      if (userMessageElement.childNodes[0]) {
         userMessageElement.replaceChild(messageBody, userMessageElement.childNodes[0]);
      } else {
         userMessageElement.appendChild(messageBody);
      }
   }
   -->
</script>

<body>
   <div id = "userIdMessage"><div>
</body>

Si ha entendido los siete pasos mencionados anteriormente, casi ha terminado con AJAX. En el próximo capítulo, veremos el objeto XMLHttpRequest con más detalle.