Ajax实现步骤和原理

Ajax实现步骤和原理

一、什么是Ajax?

Ajax = 异步 JavaScript 和XML。
  Ajax是一种用于创建快速动态网页的技术。
  通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
  传统的网页(不使用 Ajax)如果需要更新内容,必需重载整个网页面。

二、Ajax工作原理

Ajax的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给Ajax引擎自己来做, 只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。

Ajax(Asynchronous javascript and xml),实现了客户端与服务器进行数据交流过程。使用技术的好处是:不用页面刷新,并且在等待页面传输数据的同时可以进行其他操作。

三、Ajax的使用及实现步骤

(1) 创建XMLHttpRequest对象,也就是创建一个异步调用对象.

(2) 创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息.

(3)设置响应HTTP请求状态变化的函数.

(4)发送HTTP请求.

(5)获取异步调用返回的数据.

(6)使用JavaScript和DOM实现局部刷新.

AJAX运行步骤与状态值说明
  在AJAX实际运行当中,对于访问XMLHttpRequest(XHR)时并不是一次完成的,而是分别经历了多种状态后取得的结果,对于这种状态在AJAX中共有5种,分别是:
  0 - (未初始化)还没有调用send()方法
  1 - (载入)已调用send()方法,正在发送请求
  2 - (载入完成)send()方法执行完成,
  3 - (交互)正在解析响应内容
  4 - (完成)响应内容解析完成,可以在客户端调用了
  对于上面的状态,其中“0”状态是在定义后自动具有的状态值,而对于成功访问的状态(得到信息)我们大多数采用“4”进行判断。

第一种:

通过 Promise 分装的 Ajax

function Param(json) {var arr = [];for (var i in json) {arr,arr.push(i + "=" + json[i])}return arr.join("&");
}function ajax(a) {return new Promise(function(resolve, reject) {a = a || {};a.type = a.type || "get";a.data = a.data || "";var xhr = null;// 处理兼容问题xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");if (a.type === "get") {a.url += "?" + Param(a.data) + "&t=" + new Date().getTime();//调用open()方法并采用异步方式xhr.open("get", a.url, true);//使用send()方法将请求发送出去xhr.send();} else if (a.type === "post") {xhr.open("post", a.url, true);xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");xhr.send(Param(a.data))}xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status === 200) {resolve(JSON.parse(xhr.responseText));} else {reject("Err:" + xhr.status)}}}})
}

第二种:

通过 class 构造函数分装的

Ajaxclass Ajax {  constructor() {this.xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP')}fn() {this.xhr.onreadystatechange = () => {if (this.xhr.readyState === 4) {if (this.xhr.status === 200) {if (responseType === 'json') {resolve(JSON.parse(this.xhr.responseText))} else {resolve(this.xhr.responseText)}} else {reject(new Error(this.xhr.status))}}}}get(opt) {return new Promise((resolve, reject) => {let {url,async = true,params = {},responseType = 'json'} = opt;if (!url) {return;}url = this.formatData(params) ? url + '?' + this.formatData(params) : urlthis.xhr.open('get', url, async);this.fn();this.xhr.send();})}post(opt) {return new Promise((resolve, reject) => {let {url,async = true,params = {},responseType = 'json',paramsType = 'application/x-www-form-urlencoded'} = opt;if (!url) {return;}this.xhr.open('post', url, async);this.fn();this.xhr.setRequestHeader('content-type', paramsType)this.xhr.send(this.formatData(params, paramsType));})}formatData(params, paramsType = 'application/x-www-form-urlencoded') {if (paramsType === 'application/x-www-form-urlencoded') {return Object.entries(params).map(val => val[0] + '=' + val[1]).join('&')} else {return JSON.stringify(params);}}
}

AJAX状态码说明

1:请求收到,继续处理
  2:操作成功收到,分析、接受
  3:完成此请求必须进一步处理
  4:请求包含一个错误语法或不能完成
  5:服务器执行一个完全有效请求失败*

再具体就如下:

100——客户必须继续发出请求
  101——客户要求服务器根据请求转换HTTP协议版本
  200——交易成功
  201——提示知道新文件的URL
  202——接受和处理、但处理未完成
  203——返回信息不确定或不完整
  204——请求收到,但返回信息为空
  205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
  206——服务器已经完成了部分用户的GET请求
  300——请求的资源可在多处得到
  301——删除请求数据,重定向
  302——在其他地址发现了请求数据
  303——建议客户访问其他URL或访问方式
  304——客户端已经执行了GET,但文件未变化
  305——请求的资源必须从服务器指定的地址得到
  306——前一版本HTTP中使用的代码,现行版本中不再使用
  307——申明请求的资源临时性删除
  400——错误请求,如语法错误
  401——请求授权失败
  402——保留有效ChargeTo头响应
  403——请求不允许
  404——没有发现文件、查询或URl
  405——用户在Request-Line字段定义的方法不允许
  406——根据用户发送的Accept拖,请求资源不可访问
  407——类似401,用户必须首先在代理服务器上得到授权
  408——客户端没有在用户指定的饿时间内完成请求
  409——对当前资源状态,请求不能完成
  410——服务器上不再有此资源且无进一步的参考地址
  411——服务器拒绝用户定义的Content-Length属性请求
  412——一个或多个请求头字段在当前请求中错误
  413——请求的资源大于服务器允许的大小
  414——请求的资源URL长于服务器允许的长度
  415——请求资源不支持请求项目格式
  416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
  417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求
  500——服务器产生内部错误
  501——服务器不支持请求的函数
  502——服务器暂时不可用,有时是为了防止发生系统过载
  503——服务器过载或暂停维修
  504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
  505——服务器不支持或拒绝支请求头中指定的HTTP版本

Ajax前后端数据交互–SSM

前后台数据交互均使用json。

框架ssm(spring+springmvc+mybatis)

@RequestBody注解实现接收http请求的json数据,将json数据转换为java对象

@ResponseBody注解用于将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端

1.导包
	<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.75</version></dependency>
2.在配置映射器和适配器时使用
<mvc:annotation-driven></mvc:annotation-driven>

它默认加载了很多格式的解析器,例如JSON等,不需要手动配置。

案例

前端
   // 跳转 到tranferaddSub$.ajax({url : "/tranfermixtrue",type : "POST",dataType:"json",contentType : "application/json;charset=UTF-8",<!-- 向后端传输的数据 -->data : JSON.stringify({id:getdate(),accuracy:parseFloat(eval(right/50)),exercises:cons,degreeOfDifficulty:1}),success:function(result) {},error:function(result){}});
后端
  @RequestMapping(value = "/tranferaddSub")public  String tranferaddSub(@RequestBody Exercises exercises) {
//        作为addSUb的中转站ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");ExerciseSerivice serivice = context.getBean("ExerciseSeriviceImpl", ExerciseSerivice.class);String jsonString = JSON.toJSONString(exercises);Exercises exercisess = JSON.parseObject(jsonString, Exercises.class);Map<String,Object> map = new HashMap<String,Object>();map.put("date",exercisess.getId());map.put("data",jsonString);serivice.addExercise(map);return "redirect:/addSub";}@RequestMapping(value = "/tranfermulDivide")public  String tranfermulDivide(@RequestBody Exercises exercises) {
//        作为mixtrue的中转站ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");ExerciseSerivice serivice = context.getBean("ExerciseSeriviceImpl", ExerciseSerivice.class);String jsonString = JSON.toJSONString(exercises);Exercises exercisess = JSON.parseObject(jsonString, Exercises.class);Map<String,Object> map = new HashMap<String,Object>();map.put("date",exercisess.getId());map.put("data",jsonString);serivice.addExercise(map);return "redirect:/mulDivide";}@RequestMapping(value = "/tranfermixtrue")public  String tranfermixtrue(@RequestBody Exercises exercises) {
//        作为mixtrue的中转站ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");ExerciseSerivice serivice = context.getBean("ExerciseSeriviceImpl", ExerciseSerivice.class);String jsonString = JSON.toJSONString(exercises);Exercises exercisess = JSON.parseObject(jsonString, Exercises.class);Map<String,Object> map = new HashMap<String,Object>();map.put("date",exercisess.getId());map.put("data",jsonString);serivice.addExercise(map);return "redirect:/mixtrue";}

@RequestBody将传入的json数据转换位items对象,而@ResponseBody将return的i对象转换成json格式返回给jsp页面。
注:保证json的key和对应的pojo类的字段一致

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/142100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java并发面试题知识点总结(下篇)

大家好&#xff0c;我是栗筝i&#xff0c;从 2022 年 10 月份开始&#xff0c;我便开始致力于对 Java 技术栈进行全面而细致的梳理。这一过程&#xff0c;不仅是对我个人学习历程的回顾和总结&#xff0c;更是希望能够为各位提供一份参考。因此得到了很多读者的正面反馈。 而在…

Day01_《MySQL索引与性能优化》摘要

一、资料 视频&#xff1a;《尚硅谷MySQL数据库高级&#xff0c;mysql优化&#xff0c;数据库优化》—周阳 其他博主的完整笔记&#xff1a;MySQL 我的笔记&#xff1a;我的笔记只总结了视频p14-p46部分&#xff0c;因为只有这部分是讲解了MySQL的索引与explain语句分析优化…

【ruoyi】微服务关闭登录验证码

登录本地的nacos服务&#xff0c;修改&#xff1a;配置管理-配置列表-ruoyi-gateway-dev.yml 将验证码的enabled设置成false&#xff0c;即可

530.二叉搜索树的最小绝对

原题链接&#xff1a;530.二叉搜索树的最小绝对差 思路&#xff1a; 因为是二叉搜索树&#xff0c;根据他的特性&#xff0c;直接递归中序遍历获取所有元素&#xff0c;成为一个有序数组 然后在有序数值内进行双指针递归遍历即可获得最小差值 因为是有序数组&#xff0c;所以其…

深度学习之基于YoloV5的目标检测和双目测距系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 双目测距系统利用两个相机的图像来计算目标到相机的距离。通过对左右相机图像进行立体匹配&#xff0c;可以获得目标…

Ubuntu安装Qt出现bash: ./qt-unified-linux-x64-4.6.1-online.run: 权限不够的问题解决

在Ubuntu安装qt&#xff0c;在官网下载了linux的版本下载后为类似qt-unified-linux-version.run的文件&#xff08;比如我这里是qt-unified-linux-x64-4.6.1-online.run&#xff09;的文件&#xff0c;直接在终端运行【这里的version注意改为文件的原有的名字】&#xff1a; .…

如果不用Baklib,哪一个帮助中心工具能够替代它?

在各行各业进入“留量时代”的当下&#xff0c;让用户获得良好的体验和留存老客户变得更为关键&#xff0c;这对于企业的客户服务提出了更高的要求。在使用各类互联网产品时&#xff0c;用户更倾向于通过自助方式寻找答案并解决问题&#xff0c;因此帮助中心的重要性也在不断提…

4路光栅尺磁栅尺编码器解码转换5MHz高速差分信号转Modbus TCP网络模块 YL97-RJ45

特点&#xff1a; ● 光栅尺磁栅尺解码转换成标准Modbus TCP协议 ● 光栅尺5V差分信号直接输入&#xff0c;4倍频计数 ● 模块可以输出5V的电源给光栅尺供电 ● 高速光栅尺磁栅尺计数&#xff0c;频率可达5MHz ● 支持4个光栅尺同时计数&#xff0c;可识别正反转 ● 可网…

OSCNet: Orientation-Shared Convolutional Network for CT Metal Artifact Learning

OSCNet: 面向共享的CT金属伪影学习卷积网络 论文链接&#xff1a;https://ieeexplore.ieee.org/document/10237226 项目链接&#xff1a;https://github.com/hongwang01/OSCNet&#xff08;目前不会开源&#xff09; Abstract X射线计算机断层扫描(CT)已广泛应用于疾病诊断和…

如何利用IP代理进行海外推广?

在当今数字化的时代&#xff0c;网络营销已经成为企业策略的重要组成部分。而对于进去海外市场的跨境玩家来说&#xff0c;海外的推广推广是重中之重。然而&#xff0c;在开展推广的过程中&#xff0c;我们常常会遇到各种挑战&#xff0c;如地域限制、访问速度慢等。 为了解决…

arcgis--消除坐标系信息的两种方法

方法一&#xff1a;在【目录】中右击待修改数据&#xff0c;选择【属性】&#xff0c;选择【XY坐标】选项卡&#xff0c;点击清楚按钮。 方法二&#xff1a;在【数据管理工具】-【投影与变换】-【定义投影】中清楚坐标系信息。如下&#xff1a;

linux 的uart驱动框架分析

文章目录 一、底层串行硬件驱动程序二、Console支持三、锁支持四、核心数据结构1、struct uart_driver2、struct uart_port3、struct uart_ops四、常用API总结五、uart驱动示例剖析1、原厂设计的uart驱动2、8250标准uart驱动六、总结🔺【linux内核系列文章】 👉对一些文章内…

el-table实现单选和隐藏全选框和回显数据

0 效果 1 单选 <el-table ref"clientTableRef" selection-change"clientChangeHandle"><el-table-column fixed type"selection" width"50" align"center" /><el-table-column label"客户名称" a…

ChatGPT-4:OpenAI的革命性升级

在人工智能领域&#xff0c;OpenAI这家公司凭借其创新性的技术&#xff0c;成为了备受瞩目的领导者。他们最近发布的ChatGPT-4&#xff0c;以其卓越的语言处理能力和先进的模型架构&#xff0c;引领了语言模型领域的革命性升级。 ChatGPT-4的模型容量相较于前一版本有了显著的提…

“糖尿病日”感言

长期旺盛的写作欲&#xff0c;今天忽地就莫名其妙地衰退下来了。感到浑身都不舒服&#xff0c;特别是过去从未出现过的腰微痛、乏力现象发生了。 转念一想&#xff0c;或是老龄人一日不如一日的正常反应吧&#xff1f;而且&#xff0c;今天恰逢“ 联合国糖尿病日”&#xff0c…

塔式服务器是什么服务器?

在当今数字时代&#xff0c;数据的处理和存储需求不断增长&#xff0c;企业和组织需要强大而可靠的服务器来支持其业务运营和数据管理。塔式服务器作为一种常见的服务器架构&#xff0c;以其出色的性能、灵活性和可扩展性成为了许多企业和组织的首选。 塔式服务器的外观类似于…

【MySQL】库和表的操作

目录 一、库操作1.创建数据库字符集和校验规则校验规则对数据库的影响 2.查看数据库3.修改数据库4.删除数据库5.数据库备份6.查看连接情况 二、表操作1.创建表2.查看表3.修改表4.删除表 一、库操作 1.创建数据库 create database db1; //方法1 create database is not exists…

Live800:金牌客服常用的6大提问技巧

在客服行业&#xff0c;提问技巧是非常重要的一项技能。好的提问技巧不仅能够帮助客服人员更好地了解客户需求&#xff0c;还能够提高客户满意度和忠诚度。以下是金牌客服常用的6大提问技巧&#xff0c;希望能够对客服人员提升工作效率有所帮助。 1、开放性问题 开放性问题是指…

物联网AI MicroPython学习之语法 umqtt客户端

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; umqtt 介绍 模块功能: MQTT客户端功能 - 连线、断线、发布消息、订阅主题、KeepAlive等功能。 MQTT协议采用订阅者/发布者模式&#xff0c;协议中定义了消息服务质量&#xff08;Quality of Service&#x…

能链智电的野心,充电桩装不下

作者 | 张未 来源 | 洞见新研社 从油到电&#xff0c;从平台到资产运营方&#xff0c;从国内到国外&#xff0c;能链智电的野心&#xff0c;充电桩装不下。 “充电桩服务第一股”能链智电&#xff0c;曾作为平台型企业&#xff0c;连接了充电桩上下游&#xff0c;为充电桩制造…