1.简介

  1. 什么异步请求
  2. 异步请求干什么
  3. 异步请求有哪几种

异步请求(Asynchronous request)指发送请求的同时不会阻塞代码执行的一种请求方式。在传统同步请求中,发送请求后必须等待服务器响应返回后才能继续执行后续代码异步请求不需要等待服务器响应可以继续执行后续代码,当服务器返回进行相应的处理

异步请求常用于网络通信数据加载和与服务器进行交互场景,如通过 AJAX 在网页获取数据、向服务器发送表单数据、获取 API 数据等。概述:数据获取表单提交实时更新动态加载内容图片加载实时通信使用异步请求可以提高用户体验,减少页面加载时间,并允许在后台执行耗时

常见异步请求技术包括:

1.AJAX使用 JavaScript 的 XMLHttpRequest 或 Fetch API 发送异步请求,并通过回调函数或 Promise 处理服务器响应

2.WebSocket:在客户端服务器之间建立持久双向通信连接实现实时数据传输

3.Server-Sent Events(SSE):在客户端服务器之间建立单向连接,服务器可以主动推送数据到客户端

4.使用特定的客户端库、框架语言提供的异步请求功能例如 jQuery 中的 AJAX 方法、Vue.js 中的 Axios,Node.js 中的 HTTP 模块等。

2.异步请求之AJAX使用:

        AJAX(Asynchronous JavaScript and XML)是一种用于网页上进行异步通信的技术。它结合了 JavaScript、XML(现在更常用JSON)和HTTP请求来实现在不刷新整个页面的情况下,向服务器发送请求并获取响应数据。

        AJAX 的主要思想是使用 JavaScript 发送 HTTP 请求,并通过回调函数处理响应。这使得网页能够后台服务器进行数据交换,无需刷新整个页面,提供了更快速流畅用户体验

创建流程

  1. 创建对象var xhr=new XMLHttpRequest();
  2. 指定请求 xhr.open(“get“,url,true);//url地址
  3. 注册回调函数
    1.         

      xhr.onreadystatechange = function() {

        // readyState 状态为 4 表示请求已完成status 状态为 200 表示请求成功

        if (xhr.readyState === 4 && xhr.status === 200) {

          // 从服务器返回的数据通过 responseText 属性获取

          var response = xhr.responseText;

          // 在此处可以对返回的数据进行处理

          console.log(response);

        }

      };

      4.发送请求 xhr.send();

3.案例实现简单用户名输入检测

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%&gt;
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
<html&gt;
<head&gt;
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
<title&gt;Insert title here</title>
<script type="text/javascript">

	var xhr;
	function text(){
		//1.创建ajax异步对象
		 xhr=new XMLHttpRequest();
		
		//2.指定请求
		var name=document.getElementById("stu_name1").value;
		var url="text1?stu_name2="+name+"&amp;a="+Math.random();//传递text.do1 且携带stu_name2=***a=***
		xhr.open("get",url,true);
		
		//3.注册回调函数监听请求
		xhr.onreadystatechange=chuli;//chulichuli() 是不同的。一个引用(或者说是标识符),另一个是调用(或者说是函数执行)。

		//4.发送请求
		xhr.send();
	}
	
	function  chuli(){
		if(xhr.readyState==4&amp;&amp;xhr.status==200){
			// 从服务器返回的数据通过 responseText 属性获取
			var  respons=xhr.responseText;//主要用于客户端获取服务器返回的响应内容
			//要实现功能(判断姓名输入框输入的值是否是zgl是就显示重名,不是就显示可以注册)
			if(respons==1){
				document.getElementById("msg").innerHTML="用户名可用";
				document.getElementById("msg").style.color="green";
			}else{
				document.getElementById("msg").innerHTML="用户名不可用";
				document.getElementById("msg").style.color="red";
			}
		}
	}
	
	
</script>

</head>
<body>
<!-- onkeyup   onblur   区别 :
		onkeyup 是一个事件属性,用于指定在释放键盘上的按键触发的 JavaScript 函数(理解连续触发) 。
		onblur 属性来指定在失去焦点时触发的 JavaScript 函数。 -->
		
<!-- <span id="msg"></span> 是一个 HTML 标签用于在 HTML 页面中创建一个具有唯一标识符的空白元素 -->
		
		 用 户 :<input type="text" name="stu_name1" id="stu_name1" onblur="text()" />
		 <span id="msg"></span><br>
		 密 码 :<input type="text" name="stu_pwd" id="stu_pwd" />
		 
</body>
</html>

 

package com.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.xml.internal.ws.util.pipe.StandalonePipeAssembler;

import sun.management.counter.Variability;

/**
 * Servlet implementation class text_jsajax1
 */
@WebServlet("/text1")
public class text_jsajax1 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public text_jsajax1() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/plain");
		response.setCharacterEncoding("UTF-8");
		
		String name_do=request.getParameter("stu_name2");//获取异步请求传递的stu_name2中数据
//		String s="1";
		if(name_do.equals("zgl")) {
			response.getWriter().print("2");
		}
		
		response.getWriter().print("1");
//		response.getWriter().print(s);//主要用于服务器端生成响应内容
	/*	
		response.getWriter() 返回一个 PrintWriter 对象通过对象可以客户端发送文本数据。
		在调用 print(s) 方法时,会将字符串 s 写入输出流,即响应的主体部分。
		常用于在 Servlet 或其他 Java Web 应用程序生成动态内容并将其返回给客户端。
		*/
		
		
		
		
		
	}

}

实现结果

 

 总结

        1.创建ajax异步请求步骤

                1.创建对象

                2.指定请求

                3.注册回调函数

                4.发送请求

        2.其中会遇见的问题:  

    在理解异步请求.jsp

我们一次填充姓名都需要判断,这时就要知道nkeyup    onblur   区别 :
        onkeyup 是一个事件属性,用于指定在释放键盘上的按键触发的 JavaScript 函数(理解连续触发,每输入一个值都要判断一次比如一次输入zgl,也是判断了3次) 。
        onblur 属性来指定在失去焦点时触发的 JavaScript 函数(就是输入完成鼠标移动出框,才判断比如一次输入zgl,鼠标移除出框,是判断了1次)。

        

以及20行的//3.注册回调函数,监听请求

即:
        xhr.onreadystatechange=chuli;    //不是chuil()。   

  chuli 和 chuli() 是不同

chuli引用(或者说是标识),chuli() 调用(或者说是函数执行)。

也讲是说做重点的还是在这:

     第一种用法:引用(或者说是标识符)
			xhr.onreadystatechange = chuli;
		    每当 readyState 发生变化,都会调用 chuli 函数
			
	 第二种用法:调用(或者说是函数执行)
			xhr.onreadystatechange = chuli();
			在这里 chuli 函数会立即执行,并且返回 undefined
			xhr.onreadystatechange 被赋值undefined
		

原文地址:https://blog.csdn.net/weixin_45686922/article/details/131833368

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_41132.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注