首页 > 其他分享 >XMLHttpRequest实现异步请求

XMLHttpRequest实现异步请求

时间:2023-04-20 22:02:30浏览次数:34  
标签:返回 异步 XMLHttpRequest 请求 xhr 响应 String

XMLHttpRequest基本概念

XMLHttpRequest是一种用于在Web浏览器和服务器之间进行异步数据交换的技术。它可以在不重新加载页面的情况下向服务器发送HTTP请求,接收和处理来自服务器的响应,并更新网页的部分内容。XMLHttpRequest也被称为XHR,它是一种在Web开发中常用的JavaScript API。

XMLHttpRequest属性:

  • onreadystatechange:每次readyState属性改变时会调用的事件处理函数。
  • readyState:表示XMLHttpRequest对象的请求状态,共有5种状态值,分别是0-未初始化,1-正在加载,2-已加载,3-交互中,4-完成。
  • response:返回的响应数据。根据responseType的不同,可能返回不同类型的数据,例如字符串、XML文档、JSON数据、Blob对象或者ArrayBuffer对象。
  • responseType:设置响应数据类型的属性,可选值为"""arraybuffer""blob""document""json""text"
  • responseText:返回响应数据的文本内容,如果响应类型不是"text/plain"或者"text/html",则返回null。
  • responseURL:响应数据的URL。
  • responseXML:返回的XML DOM对象,如果响应数据不是XML格式,则返回null。
  • status:响应的HTTP状态码。
  • statusText:响应的HTTP状态文本信息。
  • timeout:请求的超时时间,单位为毫秒,默认为0,表示没有超时时间限制。
  • withCredentials:表示是否允许跨域请求发送Cookie等身份凭证,可选值为true和false。

XMLHttpRequest方法:

  • abort():中止当前请求。
  • getAllResponseHeaders():返回所有响应头信息。
  • getResponseHeader():返回指定名称的响应头信息。
  • open():初始化请求参数,并准备发送请求。
  • send():发送请求。
  • setRequestHeader():设置请求头信息。

代码实例

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<form action="/test" method="post" id="myForm">
    <input type="text" name="id">
    <br/>
    <input type="text"  name="pwd">
    <br/>
    <button type="submit">提交</button>
</form>
</body>
</html>
<script>
    let myForm=document.getElementById('myForm')
    let xhr=new XMLHttpRequest()
    myForm.addEventListener("submit",function (event) {
        event.preventDefault();//阻止自动提交
        let data=new FormData(this)
        xhr.open("POST","/test",true)
        xhr.setRequestHeader("content-type","application/x-www-form-urlencoded")
        xhr.onload=function (){
            if(xhr.status==200){
                alert(xhr.response)
            }
            else alert('提交错误')
        }
        xhr.send(new URLSearchParams(data))
    })
</script>
package com.example.learn.controller;

import lombok.SneakyThrows;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
public class AllController {
    @ResponseBody
    @SneakyThrows
    @RequestMapping("/test")
    public  String test(String id,String pwd){
        String res="登录失败";
        if(id.equals("123")&&pwd.equals("123")) res="登录成功";
        return res;
    }

}

 

标签:返回,异步,XMLHttpRequest,请求,xhr,响应,String
From: https://www.cnblogs.com/liyiyang/p/17338126.html

相关文章

  • request请求转发和请求重定向
    用户向服务器发送了一次HTTP请求,该请求肯能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求,但是用户是感觉不到请求转发的。根据转发方式的不同,可以区分为直接请求转发(Forward)和间接请求转发(Redirect)两种。直接转发方式(Forward)客户端和浏......
  • Request请求参数中文乱码问题
    Tomcat8以下的默认编码格式是ISO-8859-1,8版本以上Tomcat已经把默认编码格式改为UTF-8,此篇博客主要是解决Tomcat8以下版本的中文乱码问题处理。一、Request请求参数中文乱码-POST解决方案请求参数如果存在中文数据,则会乱码解决方案:POST:设置输入流的编码req.setCharacterEnc......
  • 查找80端口请求数最高的前20个IP
    有时候业务的请求量突然上去了,那么这个时候我们可以查看下请求来源IP情况,如果是集中在少数IP上的,那么可能是存在攻击行为,我们使用防火墙就可以进行封禁。命令: netstat-anlp|grep80|greptcp|awk'{print$5}'|awk-F:'{print$1}'|sort|uniq-c|sort-nr|h......
  • Request通用方式获取请求数据
    请求参数获取方式:方法一:>Get方式:>POST方式: 思考:GET请求方式和POST请求方式区别主要是在于获取请求参数的方式不一样,是否可以提供一种统一获取请求参数的方式,从而统一doGet和doPost方法内的代码。  ......
  • java线程同步和异步的区别
    在Java中,同步和异步是指多线程并发执行中的两种不同的机制。同步指的是线程之间的协作方式,即当一个线程在执行一个任务时,其他线程必须等待该线程执行完该任务后才能执行同一段代码。同步机制通常使用synchronized关键字或Lock对象进行实现,以保证多线程共享的资源同步访问。 ......
  • java线程同步和异步的区别
    在Java中,同步和异步是指多线程并发执行中的两种不同的机制。同步指的是线程之间的协作方式,即当一个线程在执行一个任务时,其他线程必须等待该线程执行完该任务后才能执行同一段代码。同步机制通常使用synchronized关键字或Lock对象进行实现,以保证多线程共享的资源同步访问。异步指的......
  • C#多线程、异步
    1.如果数据仅用于展示,或者对数据的获取没有先后要求,可以使用如下线程privatevoidAutoUpdate_Loaded(objectsender,RoutedEventArgse){ThreadThreadUpdate=newThread(Update);}privatevoidUpdate(){try{Thread.Sleep(2000);//执行更新ExcuteUpdate();D......
  • http 前端5种请求优化方法
    1、减少请求数量:可以通过将多个资源(例如JavaScript、CSS、图像等)合并为单个文件,从而减少HTTP请求的数量。另外,使用CDN(内容分发网络)也可以减少跨地                域的请求延迟。2、缓存请求结果:对于一些不会频繁更新的资源,可以将它......
  • vue2源码-九、异步更新
    异步更新异步更新原因以下情况下:vm.name='123'vm.name='234'vm.name='123'...如果我们频繁的修改一个数据,就会多次触发视图渲染dep.notify->watcher.update这样就会降低性能,因此就需要采用异步更新策略,仅仅在最后执行一次视图更新操作。思路当数据变化时,先......
  • Range请求头设置实现视频分段传输
    老实说,人太懒了,现在基本都不喜欢写笔记了,但是网上有关Range请求头的文章都太水了下面是抄的一段StackOverflow的代码...自己大修改过的,写的注释挺全的,应该直接看得懂,就不解释了写的不好...只是希望能给视频网站开发的新手一点点帮助吧.业务场景:视频分段传输、视频多段传输(理论......