AJAX详解

2023-05-16

1.AJAX是什么?
AJAX即“Asynchronous JavaScript and XML”(异步的JavaScript与XML技术),指的是一套综合了多项技术的浏览器端网页开发技术。

2.异步交互和同步交互
同步:
(1)发一个请求,就要等待服务器的响应结束,然后才能发第二个请求!中间这段时间就是一个字“卡”
(2)刷新的是这个页面

异步:
(1)发一个请求后,无需等待服务器的响应,然后就可以发第二个请求!
(2)可以使用js接口服务器的响应,然后使用js来局部刷新

【示例】使用JS点击按钮触发事件,设置内容改变标签内容(局部刷新)

3.AJAX常见应用情景和优缺点
3.1 应用情景
(1)当我们在百度中输入一个"Java"后,会马上出现一个下拉列表!列表中显示的是包含"Java"字的10个关键字。

其实这里就使用了AJAX技术!当文件框发生了输入变化时,浏览器会使用AJAX技术向服务器发送一个请求,查询包含"Java"的前10个关键字,然后服务器会把查询到的结果响应给浏览器,最后浏览器把这10个关键字显示在下拉列表中。

整个过程中页面没有刷新,只是刷新页面中的局部位置而已。
当请求发出后,浏览器还可以进行其它操作,无需等待服务器的响应。

(2)当输入用户名后,把光标移动到其它表单项上时,浏览器会使用AJAX技术向服务器发出请求,服务器会查询名为张三的用户是否存在,最终服务器返回true表示名为张三的用户已经存在了,浏览器在得到结果后显示"用户名已被注册!"。

整个过程中页面没有刷新,只是局部刷新了
在请求发出后,浏览器不用等待服务器响应结果就可以进行其它操作。

=========================================
百度的搜索框
用户注册时(校验用户是否存在)

4.AJAX的优缺点
优点:异步交互:增强了用户的体验
性能:因为服务器无需再响应整个页面,只需要响应部分内容,所以服务器的压力减轻了!

缺点:
ajax不应用在所有场景
ajax无端的增多了对服务器的访问次数,给服务器带来了压力。

5.AJAX发送异步请求(四步操作)
XMLHttpRequest 对象用于在后台与服务器交换数据。

(1)第一步(得到XMLHttpRequest)
ajax其实只需要学习一个对象:XMLHttpRequest,如果掌握了它,就掌握了ajax。
得到XMLHttpRequest
    --》大多数浏览器都支持: var xmlHttp = new XMLHttpRequest();
    --》IE6.0:var xmlHttp = new ActiveXObject("Msml2.XMLHTTP");
    --》IE5.5:var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

**--封装得到XMLHttpRequest的函数
function createXMLHttpRequest() {
	try {
		return new XMLHttpRequest(); //Firefox, Opera 8.0+, Safari
	} catch (e) {
		try {
			return new ActiveXObject("Msml2.XMLHTTP"); // Internet Explorer 6.0
		} catch (e) {
			try {
				return new ActiveXObject("Microsoft.XMLHTTP"); // Internet Explorer 5.5
			} catch (e) {
				alert("哥们儿,你用的是什么浏览器啊");
				throw e;
			}
		}
	}
};


(2)第二步(打开与服务器的连接)
XMLHttp.open():用来打开与服务器的连接,它需要三个参数
---》请求方式:可以是GET或POST请求
---》请求的URL:指定服务器端资源,例如:/demo/LoginServlet
---》请求是否为异步:如果为true表示发送异步请求,否则同步请求

=====》xmlHttp.open("GET","/demo/LoginServlet",true);----GET请求

如果是POST请求如下(如果发送请求时需要带有参数,一般都用POST请求)
=====》open:xmlHttp.open("post",...);
=====》添加一步:设置Content-Type请求头:
	----》xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	---->send: xmlHttp.send("username=zhangsan&password=123");//发送请求时指定的请求体


(3)第三步(发送请求)
---》xmlHttp.send(null):如果不给参数可能会造成部分浏览器无法发送
*****参数:就是请求的内容!如果是GET请求,必须给出null。

(4)第四步()
---》在xmlHttp对象的一个事件上注册监听器:onreadystatechange
---》xmlHttp对象5个状态
0:初始化未完成状态,只是创建了XMLHttpRequest对象,还未调用open()方法
1:请求已开始,open()方法已调用,但还没调用send()方法
2:请求发送完成状态,send()方法已调用
3:开始读取服务器响应
4:读取服务器响应结束(通常我们只关心这个状态)

----》得到xmlHttp对象的状态
---------》var state = xmlHttp.readyState;//可能是0 1 2 3 4

----》得到服务器响应的状态码
---------》var status = xmlHttp.status;//200    404    500

----》得到服务器响应的内容
---------》var content  = xmlHttp.responseText;//得到服务器的响应的文本格式的内容
---------》var content =  xmlHttp.responseXML;//得到服务器的响应的xml响应的内容,document对象

xmlHttp.onreadystatechange = function(){//xmlHttp的5种状态都会调用本方法
	if(xmlHttp.readyState == 4 && xmlHttp.status == 200){//双重判断:判断是否为4状态,而且还要判断是否为200
		//获取服务器的响应内容
		var content  = xmlHttp.responseText;
	}
};

6.经典案例
(1)点击按钮,使用ajax响应内容在客户端某标签中显示响应的内容
(2)发送POST请求
(3)用户名是否已被注册

jsp页面代码:

function mys(v){
		var va=$(v).html();
		$("#wd").val(va);
	}
	$(function(){
		$("#mysele").hover(function(){
			$("#mysel").show();
			var name=$(this).val();
			var mysele="";
			$.ajax({
				url:"Select",//请求地址
				type:"post",//访问方式
				data:"name="+name,//请求参数
				datatype:"text",//预计返回类型
				async:true,
				success:function(message){//回调函数
					var list=$.parseJSON(message);
					
					$.each(list,function(index,value){
						mysele+="<a  οnclick='mys(this)'>"+value+"</a><br>";
					})
					$("#mysel").append(mysele);
				}
			})
			
		},function(){
			$("#mysel").hide();
			$("#mysel").empty();
		}
		
		
		)
	})

Servlet页面:

package com.zking.servelt;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

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.alibaba.fastjson.JSON;
import com.zking.biz.Goodsbiz;
import com.zking.biz.Goodsbiziml;
import com.zking.entity.Goods;

/**
 * Servlet implementation class Select
 */
@WebServlet("/Select")
public class Select extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=UTF-8");
		
		String name=request.getParameter("name");
		String message="";
		List<String> lls=new ArrayList<String>();
		if(name!=null) {
			Goodsbiz ig=new Goodsbiziml();
			List<Goods> ls= ig.findGoodsAll(1, 4, name);
			for(Goods l:ls) {
				lls.add(l.getGname());
			}
			message=JSON.toJSONString(lls);
			
		}
		
		
		
		//响应给用户
		PrintWriter out=response.getWriter();
		out.println(message);
		
		//session
		//request.getSession().setAttribute(arg0, arg1);
		//this.getServletContext().setAttribute(arg0, arg1);
	}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AJAX详解 的相关文章

  • 如何在没有数据库的情况下创建AJAX分页?

    是否可以在没有 MySQL 帮助的情况下获取 AJAX 分页页面 难道我不能只添加一个包含我需要显示的文本和标记的 PHP 文件 然后通过单击页码将该内容提供给用户吗 那么可以用纯 jQuery 和 PHP 来实现吗 您会使用什么代码方法来
  • 单击文件下载后,成功后使用 AJAX 重定向到另一个页面

    In my WordPress project my Download button containing a zip file which onClick should be downloaded So the HTML producin
  • 在 ASP.NET 中使用 AjaxControlToolkit 的异步 AJAXFileUpload 控件返回数据

    我正在使用上面的控件 注意它是 ASP NET 控件 我似乎看到很多人使用用 javascript 编写的类似名称的控件 来允许使用进度条 拖放操作来上传多个文件 该部分一切正常 但我需要随文件返回两条数据 具体来说 用户从两个文本框中输入
  • 在对 VSTS API 的 Ajax 调用中使用 OAuth Bearer Token 而不是 PAT

    我已成功让我的 ASP NET MVC5 应用程序在服务器端用 C 读取和写入 VSTS 工作项 然而 为了获得最佳的用户体验 我真的想使用 Ajax 进行一些更新 我已经能够使用在我自己的帐户下创建的个人访问令牌 PAT 完美地完成此操作
  • 使用 Ajax 在输入时提交 Textarea,然后渲染部分内容而不刷新整个页面

    目前我正在尝试通过 JS 和 Ajax 在没有提交按钮的情况下发表评论 并且它有效 问题是当帖子提交时 页面重新加载到 post id comment页面 我希望它呈现部分内容 而不是刷新整个页面或将我带到不同的页面 我对 JS 不熟悉 任
  • 如何通过 javascript 和 ajax 调用 Scala 中的方法?

    我不知道我的标题是否有点误导 但这是我真正需要帮助的 我正在获取这个网址 get fb login fbEmail function data console log data 这是我的路线 GET fb login email prese
  • 使用 jQuery 更改 CSS 类属性

    有没有办法使用 jQuery 更改 CSS 类的属性 而不是元素属性 这是一个实际的例子 我有一个 div 类red red background red 我想转班级red背景属性 而不是具有类的元素red分配的背景 如果我用 jQuery
  • JSONP 使用 JQuery 从 HTTPS 协议获取 JSON

    我正在尝试获取从 https 安全站点发送的 JSON 客户端希望不要使用任何服务器端语言 全部都是 Javascript 我读到 当使用 Jquery 中的 ajax 函数时 我必须使用 JSONP 才能从安全站点加载 JSON 我的第一
  • 将列名称与具有 AJAX 数据源的 DataTable 一起使用

    我正在尝试升级我的系统以使用 DataTables 1 10 而不是 1 9 并且我正在尝试找到一种使用 JSON 对象而不是列表传回行内容的方法 具体来说 而不是以格式传回数据 data data data data data data
  • ASP.Net MVC AJAX 链接不起作用

    为了实现 AJAX 登录 我在我的页面上有这个链接 附近有一个 id 为 lll 的 div 当我单击该链接时 我得到了无聊的确认 只是出于调试目的而添加 没有它的行为是相同的 但然后什么也没有发生 没有请求到达服务器 因为我在 LogOn
  • GWT - 如何组织项目以拥有多个网页以及它们之间的导航

    我是 GET 的新手 顺便说一句 它给我留下了深刻的印象 并且发现它对于像我这样熟悉 C NET 桌面技术并愿意编写 Web 应用程序的人来说非常有吸引力 我根据 GWT Eclipse 向导生成的示例启动了自己的项目 该项目生成带有面板的
  • 中止来自 jsf.ajax.addOnEvent() 的 JSF Ajax 请求

    我希望有一个中心位置来监视 ajax 请求并在某些情况下中止它们 我唯一不知道要做的一件事就是实际中止来自一个中央函数的 ajax 请求 我想象解决方案看起来像这样 jsf ajax addOnEvent function data if
  • PHP、jQuery 和 Ajax 调用乱序

    我正在使用 jQuery 进行 Ajax 调用 我有 x 数量的 Ajax 调用附加到 div 这些 Ajax 加载请求是由 PHP foreach 循环生成的 问题是它们渲染的顺序不正确 它们被设置在数组中
  • Ajax - 限制列表的加载,然后在滚动上加载其余部分

    我有一家商店 在一个页面上显示某个类别的所有产品 这是店主喜欢的方式 因此不能选择分页 为了缩短某些重类别的加载时间 我希望实现一个可以加载许多产品的脚本 li s然后在页面滚动上加载另一组 页面就是用这个结构生成的 div ul clas
  • 将查询字符串添加到 Ajax url 调用

    我想知道当我们调用 Jquery Ajax 时是否可以将查询字符串与 URL 一起传递 例子 ajax type POST url index php task addNewInfo data regForm serialize dataT
  • Javascript Ajax 优雅降级,不同页面?

    我开始更加关注如何让我的 javascript 和 ajax 优雅地降级 比较推荐哪个 致力于将优雅降级合并到现有代码中 可能很棘手 或者 为非 js 用户开发一组不同的页面 我倾向于不同的页面集 因为我觉得它更容易 并且我可以为每种用户类
  • CodeIgniter 控制器 - JSON - AJAX

    我正在尝试通过 AJAX 使用 CodeIgniter 发送表单构建 并尝试使用 JSON 获取响应 但是 我只在打开开发人员选项卡时看到响应 我什至不确定这是否实际上是响应 因为它显示了两个 json 数据 它所显示的只是加载旋转器 然后
  • 在网页上的文本框中键入内容时删除所有空格

    我如何在用户打字时即时删除输入到文本框中的空格 function var txt myTextbox var func function txt val txt val replace s g txt keyup func blur fun
  • 如何处理 ASP.net MVC Ajax 加载页面上的 jQuery 事件?

    我有一个问题 我是 jQuery Mobile 领域的新手 对于 ASP Net MVC 部分我有点迷失 这是我的问题 在我的移动网站中 我想更改导航栏 我使用的更像是应用程序栏 按钮 而我位于编辑页面或主页等 因此 这些页面 编辑 显示
  • jquery window.open 在 ajax 成功中被阻止

    尝试在我的 ajax 成功调用中打开一个新的浏览器窗口 但是 它被阻止为弹出窗口 我做了一些搜索 发现用户事件需要绑定到 window open 才能避免这种情况发生 我还找到了这个解决方案 您可以在 ajax 之前打开一个空白窗口 然后在

随机推荐

  • MySQL/MariaDB 查询语句

    基础表 emp 去重查询 DISTINCT 查询职位 SELECT job from emp 显示所有职位 SELECT DISTINCT job FROM emp 查看表中包含的所有job类型 xff0c 重复的只显示一个 输出结果 限制
  • Spring框架通过工厂实现对象实例化过程

  • Eclipse常用设置

    1 界面风格 2 代码字体字号 3 工作空间编码
  • SpringBoot整合HikariCP连接池

    整合 HikariCP 连接池 创建依赖 配置连接池 打开 application properties 配置文件 xff0c 添加如下内容 spring datasource url 61 jdbc mysql dbgoods serve
  • SpringBoot框架整合MyBatis

    添加 MyBatis 启动依赖 参考官网mybatis org spring 找到Spring Boot菜单选项 基于菜单项找到MyBatis启动依赖 xff0c 一定要设置版本 xff0c Spring Boot 中没有设置 MyBati
  • BadTokenException: Unable to add window -- token android.os.BinderProxy

    由于遇到的是BadTokenException这个异常 xff0c 所以搜资料总结了一下 xff1a 这个异常总共有一下几种出现方式 xff1a 1 Unable to add window token null is not valid
  • SpringBoot框架整合SpringMVC、Mybatis框架,对数据库操作的工作原理

    Controller层 Controller层是接收用户访问的url信息 xff0c 再将获取到的内容发送到其他层级进行处理 xff0c 处理完成后返回新的url xff0c 使用户得到想要查询或是其他操作的页面 64 Controller
  • Lombok插件应用

    Lombok安装步骤 https blog csdn net weixin 47253919 article details 119871501 spm 61 1001 2014 3001 5502 常用注解 64 Setter 用于为描述
  • 类的属性(公有属性,受保护属性,私有属性)

    x是类的公有属性 class Animal x 61 10 def test self print Animal x print self x self是类本身 xff0c 等于Animal class Dog Animal def tes
  • linux网络配置(超简单,一看就会)

    2022 11 19 文章目录 前言一 linux网络 xff1f 二 使用步骤 1 查看本机ip 2 进入root用户 3 进入配置网络的目录 4 配置网络 5 重启网络服务 6 查看IP并测试网络 总结 一 linux网络 本章以配置虚
  • 【FPGA】四、按键消抖

    文章目录 一 按键消抖简介 二 按键消抖方式 1 硬件消抖 2 软件消抖 三 程序设计 1 设计思路 2 程序代码 3 仿真验证 总结 一 按键消抖简介 按键在我们日常生活中是很常见的 xff0c 主要有机械按键和虚拟按键 在我们用来进行F
  • 运行npm install出现这种问题怎么解决

    npm ERR code 1 npm ERR path C end springbootdtjr3 master src main resources admin admin node modules node sass npm ERR c
  • java中求平方根

    案例2 求平方根 需求 输入一个大于等于2的整数x xff0c 计算并返回x的平方根 结果只保留整数部分 xff0c 小数部分将被舍去 分析 计算x的平方根 就是x进行开方 开平方的调用函数是Math sqrt 但是要注意的是指保留整数部分
  • 解决Maven配置本地仓库路径不生效问题多个方法详解。(已成功解决自己遇到的问题)

    首先我尝试了很多种方法 xff0c 就是这个方法让我成功 xff0c 和大家分享一下 xff01 xff08 我用方法二成功的 xff01 xff09 maven本地仓库默认值 xff1a 用户家目录 m2 repository 由于本地仓
  • JAVA编写程序,打印九九乘法表(涵盖三种表达形式)

    运用java写出九九乘法表可以概括为三种表达形式 一是长方型 二是正三角型 三是倒三角型 无论是那种 xff0c 用的都是for循环 思路 xff1a 用两个for循环嵌套循环出因子a乘因子b等于乘积 xff0c 外循环代表因子a xff0
  • 【路径规划】蚁群算法机器人栅格地图最短路径规划【含Matlab源码 1618期】

    一 蚁群算法及栅格地图简介 1 蚁群算法 1 1 蚁群算法的提出 蚁群算法 ant colony optimization ACO 又称蚂蚁算法 是一种用来寻找优化路径的机率型算法 它由Marco Dorigo于1992年在他的博士论文中提
  • 遇见Java

    Java是一门面向对象的编程语言 xff0c 不仅吸收了C 43 43 语言的各种优点 xff0c 还摒弃了C 43 43 里难以理解的多继承 指针等概念 xff0c 因此Java语言具有功能强大和简单易用两个特征 Java语言作为静态面向
  • CSS基础-17-拓展-标签居中

    拓展 标签水平居中方法总结 margin 0 auto 如果需要让div p h 大盒子 水平居中 可以通过margin 0 auto 实现 注意点 1 如果需要让 div p h 大盒子 水平居中 xff0c 直接给当前元素本身设置即可
  • 用HTML和css写一个简单地购物小票

    效果图 HTML代码 lt DOCTYPE html gt lt html gt lt head gt lt meta charset 61 34 utf 8 34 gt lt title gt 小票 lt title gt lt link
  • AJAX详解

    1 AJAX是什么 xff1f AJAX即 Asynchronous JavaScript and XML xff08 异步的JavaScript与XML技术 xff09 xff0c 指的是一套综合了多项技术的浏览器端网页开发技术 2 异步