Obtención de XmlHttpRequest

Comprensión del objeto XmlHttpRequest

El objeto XMLHttpRequest es una solicitud HTTP basada en XML. Es una interfaz de navegador para interactuar con el servidor. A través de XMLHttpRequest, podemos solicitar una URL específica para obtener datos sin actualizar la página, y aunque el nombre es XMLHttpRequest, en realidad puede ser utilizado para Obtener datos de cualquier tipo.

Cómo usar el objeto XMLHttpRequest

  • Crear un objeto XMLHttpRequest
var xhr = new XMLHttpRequest();
  • establecer conexión http
xhr.open('GET', '/login');
  • Enviar petición
xhr.send()
  • obtener datos de retorno
//就等待远程主机做出回应。这时需要监控XMLHttpRequest对象的状态变化,指定回调函数 
xhr.onreadystatechange = function(){
    
    
    if ( xhr.readyState == 4 && xhr.status == 200 ) {
    
    
      alert( xhr.responseText );
    } else {
    
    
      alert( xhr.statusText );
    }
  };

estado listo

valor estado describir
0 UNSENT Se ha creado el proxy XMLHttpRequest, pero no se ha llamado al método open()
1 OPENED open()el método ha sido llamado
2 HEADERS_RECEIVED Se ha llamado al método send() y se han recibido los encabezados de respuesta.
3 LOADING Se está recibiendo la parte del cuerpo de la respuesta.
4 DONE La operación solicitada se ha completado. Esto significa que la transferencia de datos se completó por completo o falló
  • cancelar solicitud
XMLHttpRequest.abort()
//当一个请求被终止,它的  readyState 将被置为0,并且请求的 status 置为 0。

buscar

descripción general

La API Fetch proporciona una interfaz de JavaScript para acceder y manipular solicitudes y respuestas HTTP, y también proporciona un fetch()método ofrece una forma sencilla y sensata de obtener recursos de forma asíncrona en toda la red.

características

  1. Basado en la implementación estándar de Promise, admite async/await
  2. Romper con XHR es una nueva implementación en la especificación ES.
  3. La sintaxis es concisa y más semántica.

pregunta

  1. fetch no admite la cancelación (xhr tiene un método xhr.abort que puede bloquear solicitudes directamente)

  2. fetch no tiene forma de monitorear el progreso de la solicitud de forma nativa, pero XHR sí puede.

  3. la compatibilidad de recuperación no es muy buena, IE no es compatible

Aviso

  1. fetch solo informa errores para las solicitudes de red, y tanto 400 como 500 se consideran solicitudes exitosas. Cuando el servidor devuelve los códigos de error 400 y 500, no se rechazará. Solo cuando la solicitud no se puede completar debido a errores de red, se rechazará fetch. Se requiere encapsulación para el procesamiento.
  2. fetch no trae cookies de forma predeterminada, debe agregar elementos de configuración: fetch (url, {credentials: 'include'})

buscar usos

fetch('http://example.com/movies.json')
  .then(response => response.json())
  .then(data => console.log(data));
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <form id="myform">
        <input type="text" placeholder="community" id="community">
        <input type="text" placeholder="parkingLotId" id="parkingLotId">
        <input type="text" placeholder="name" id="name">
        <input type="text" placeholder="status" id="status">
        <button>添加</button>
    </form>
</body>
<script>
    let form = document.querySelector('#myform')
    form.onsubmit = async function (e) {
    
    
        e.preventDefault();//阻止事件的默认行为
        //获取每个输入框的值
        let community = document.querySelector('#community').value
        let parkingLotId = document.querySelector('#parkingLotId').value
        let name = document.querySelector('#name').value
        let status = document.querySelector('#status').value
        let obj = {
    
     community, parkingLotId, name, status }
        //发起请求   
        let result = await fetch('/parking-lot/add', {
    
    
            method: 'post',
            headers: {
    
    
                'Content-Type': 'application/json',
            },
            body: JSON.stringify(obj)
        });
        let data = await result.json();
        if (data.status == 201) {
    
    
            alert('添加成功')
        }
    }
</script>

</html>

Supongo que te gusta

Origin blog.csdn.net/weixin_43183219/article/details/124689706
Recomendado
Clasificación