Solicitud AJAX XMLHttp


Tabla de contenido

    Mostrar tabla de contenidos


El objeto XMLHttpRequest se utiliza para solicitar datos de un servidor.


Enviar una solicitud a un servidor

Para enviar una solicitud a un servidor, utilizamos los métodos open() y send() del objeto XMLHttpRequest:

xhttp.open("GET", "ajax_info.txt", true);
 xhttp.send();
open(method, url, async)

Especifica el tipo de solicitud

método: el tipo de solicitud: GET o POST
url: la ubicación del servidor (archivo)
async: verdadero (asincrónico) o falso (sincrónico)

send()

Envía la solicitud al servidor (usado para GET)

send(string)

Envía la solicitud al servidor (usado para POST)


La URL: un archivo en un servidor

El parámetro URL del método open() es una dirección a un archivo en un servidor:

xhttp.open("GET", "ajax_test.asp", true);

El archivo puede ser cualquier tipo de archivo, como .txt y .xml o archivos de secuencias de comandos del servidor como .asp y .php (que pueden realizar acciones en el servidor antes de enviar la respuesta).


Asincrónico: ¿verdadero o falso?

Las solicitudes del servidor deben enviarse de forma asincrónica.

El parámetro asíncrono de open() El método debe establecerse en verdadero:

xhttp.open("GET", "ajax_test.asp", true);

Al enviar de forma asincrónica, el JavaScript no tiene que esperar la respuesta del servidor, sino que puede:

  • ejecutar otros scripts mientras espera la respuesta del servidor

  • lidiar con la respuesta después de que la respuesta esté lista

El valor predeterminado para el parámetro async es async=true.

Puede eliminar de forma segura el tercer parámetro de su código.

No se recomienda XMLHttpRequest síncrono (async=false) porque JavaScript deje de ejecutarse hasta que la respuesta del servidor esté lista. Si el servidor está ocupado o es lento, el La aplicación se bloqueará o se detendrá.


¿Solicitud GET o POST?

GET es más simple y rápido que POST y se puede utilizar en la mayoría de los casos.

Sin embargo, utilice siempre solicitudes POST cuando:

  • Un archivo en caché no es una opción (actualizar un archivo o base de datos en el servidor).

  • Envío de una gran cantidad de datos al servidor (POST no tiene limitaciones de tamaño).

  • Al enviar entradas del usuario (que pueden contener caracteres desconocidos), POST es más sólido y seguro que GET.


OBTENER solicitudes

Una solicitud GET simple:

Ejemplo

xhttp.open("GET", "demo_get.asp");
 xhttp.send();

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h2>The XMLHttpRequest Object</h2>
<button type="button" onclick="loadDoc()">Request data</button>
<p id="demo"></p>

<script>
function loadDoc() {
  const xhttp = new XMLHttpRequest();
  xhttp.onload = function() {
    document.getElementById("demo").innerHTML = this.responseText;
  }
  xhttp.open("GET", "demo_get.asp");
  xhttp.send();
}
</script>

</body>
</html>

En el ejemplo anterior, es posible que obtenga un resultado almacenado en caché. Para evitar esto, agregue una identificación única a la URL:

Ejemplo

xhttp.open("GET", "demo_get.asp?t=" + Math.random());
 xhttp.send();

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h2>The XMLHttpRequest Object</h2>
<button type="button" onclick="loadDoc()">Request data</button>

<p id="demo"></p>

<script>
function loadDoc() {
  const xhttp = new XMLHttpRequest();
  xhttp.onload = function() {
    document.getElementById("demo").innerHTML = this.responseText;
  }
  xhttp.open("GET", "demo_get.asp?t=" + Math.random());
  xhttp.send();
}
</script>

</body>
</html>

Si desea enviar información con el método GET, agregue la información a la URL:

Ejemplo

xhttp.open("GET", "demo_get2.asp?fname=Henry&lname=Ford");
 xhttp.send();

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h2>The XMLHttpRequest Object</h2>
<button type="button" onclick="loadDoc()">Request data</button>

<p id="demo"></p>

<script>
function loadDoc() {
  const xhttp = new XMLHttpRequest();
  xhttp.onload = function() {
    document.getElementById("demo").innerHTML = this.responseText;
  }
  xhttp.open("GET", "demo_get2.asp?fname=Henry&lname=Ford");
  xhttp.send();
}
</script>
 
</body>
</html>

En un capítulo posterior se explica cómo el servidor utiliza la entrada y cómo responde a una solicitud.



Solicitudes de publicación

Una solicitud POST simple:

Ejemplo

xhttp.open("POST", "demo_post.asp");
 xhttp.send();

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h2>The XMLHttpRequest Object</h2>
<button type="button" onclick="loadDoc()">Request data</button>

<p id="demo"></p>
 
<script>
function loadDoc() {
  const xhttp = new XMLHttpRequest();
  xhttp.onload = function() {
    document.getElementById("demo").innerHTML = this.responseText;
  }
  xhttp.open("POST", "demo_post.asp");
  xhttp.send();
}
</script>

</body>
</html>

Para PUBLICAR datos como un formulario HTML, agregue un encabezado HTTP con setRequestHeader(). Especifique los datos que desea enviar en el método send():

Ejemplo

xhttp.open("POST", "ajax_test.asp");
 xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
 xhttp.send("fname=Henry&lname=Ford");

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h2>The XMLHttpRequest Object</h2>
<button type="button" onclick="loadDoc()">Request data</button>

<p id="demo"></p>
 
<script>
function loadDoc() {
  const xhttp = new XMLHttpRequest();
  xhttp.onload = function() {
    document.getElementById("demo").innerHTML = this.responseText;
  }
  xhttp.open("POST", "demo_post2.asp");
  xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhttp.send("fname=Henry&lname=Ford");
}
</script>

</body>
</html>
setRequestHeader(header, value)

Agrega encabezados HTTP a la solicitud

encabezado: especifica el nombre del encabezado
valor: especifica el valor del encabezado


Solicitud sincrónica

Para ejecutar una solicitud sincrónica, cambie el tercer parámetro en el método open() a false:

xhttp.open("GET", "ajax_info.txt", false);

A veces, async=false se utilizan para pruebas rápidas. También encontrarás Solicitudes sincrónicas en código JavaScript antiguo.

Dado que el código esperará a que se complete el servidor, no es necesario realizar un onreadystatechange función:

Ejemplo

xhttp.open("GET", "ajax_info.txt", false);
xhttp.send();
document.getElementById("demo").innerHTML = xhttp.responseText;

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h2>The XMLHttpRequest Object</h2>

<p id="demo">Let AJAX change this text.</p>

<button type="button" onclick="loadDoc()">Change Content</button>

<script>
function loadDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.open("GET", "ajax_info.txt", false);
  xhttp.send();
  document.getElementById("demo").innerHTML = xhttp.responseText;
}
</script>

</body>
</html>

No se recomienda XMLHttpRequest síncrono (async=false) porque JavaScript deje de ejecutarse hasta que la respuesta del servidor esté lista. Si el servidor está ocupado o es lento, el La aplicación se bloqueará o se detendrá.

Se recomienda que las herramientas de desarrollo modernas adviertan sobre el uso solicitudes sincrónicas y puede generar una excepción InvalidAccessError cuando ocurre.