面试题 —— Ajax的基本原理总结

article/2025/9/17 16:13:20

前两天面试的时候,面试官问我,你掌握的技能是Ajax,那你给我讲一下它的基本原理吧!

妈呀,瞬间脑子空白。当时在门口背了好久的网络知识点,一时竟然说不吃话,只记得什么异步通信,同步数据,面试官的笑让我不寒而栗…………今天整体的整理一遍Ajax的知识点吧。


Ajax 的全称是Asynchronous JavaScript and XML(异步的JavaScript 和 XML),其中,Asynchronous 是 异步 的意思,它有别于传统web开发中采用的同步的方式。


关于同步和异步

异步传输是面向字符的传输,它的单位是字符;
而同步传输是面向比特的传输,它的单位是桢,它传输的时候要求接受方和发送方的时钟是保持一致的。

同步的话,必须这个操作完了才会执行下一步,在等待期间浏览器会挂起不能执行任何接下来的js代码;异步则是【告诉】浏览器去做,【告诉】是一瞬间的事情,然后就继续执行下一步了,等到结果返回来了,浏览器会通知js执行相应的回调。


ajax所包含的技术

1.使用CSS和XHTML来表示。
2. 使用DOM模型来交互和动态显示。
3.使用XMLHttpRequest来和服务器进行异步通信。(最重要)
4.使用javascript来绑定和调用。

在上面几中技术中,除了XmlHttpRequest对象以外,其它所有的技术都是基于web标准并且已经得到了广泛使用的,XMLHttpRequest虽然目前还没有被W3C所采纳,但是它已经是一个事实的标准,因为目前几乎所有的主流浏览器都支持它。


ajax原理和XmlHttpRequest对象

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

Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发送异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。

XMLHttpRequest是ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。

首先,需要先了解XMLHttpRequest这个对象的属性方法

属性:

这里写图片描述

方法:

这里写图片描述

对这个对象有了静态了了解,知道它长的什么样子,有什么功能了,下边该我们使用它了,当然这里我也用五步法写出代码来:

第一步:创建XMLHttpRuquest对象;
第二步:注册回调方法
第三步:设置和服务器交互的相应参数
第四步:设置向服务器端发送的数据,启动和服务器端的交互
第五步:判断和服务器端的交互是否完成,还要判断服务器端是否返回正确的数据

//类的构建定义,主要职责就是新建XMLHttpRequest对象  
var MyXMLHttpRequest=function(){  var xmlhttprequest;  if(window.XMLHttpRequest){  xmlhttprequest=new XMLHttpRequest();  if(xmlhttprequest.overrideMimeType){  xmlhttprequest.overrideMimeType("text/xml");  }  }else if(window.ActiveXObject){  var activeName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];  for(var i=0;i<activeName.length;i++){  try{  xmlhttprequest=new ActiveXObject(activeName[i]);  break;  }catch(e){  }  }  }  if(xmlhttprequest == undefined || xmlhttprequest == null){  alert("XMLHttpRequest对象创建失败!!");  }else{  this.xmlhttp=xmlhttprequest;  }  //用户发送请求的方法  MyXMLHttpRequest.prototype.send=function(method,url,data,callback,failback){  if(this.xmlhttp!=undefined && this.xmlhttp!=null){  method=method.toUpperCase();  if(method!="GET" && method!="POST"){  alert("HTTP的请求方法必须为GET或POST!!!");  return;  }  if(url==null || url==undefined){  alert("HTTP的请求地址必须设置!");  return ;  }  var tempxmlhttp=this.xmlhttp;  this.xmlhttp.onreadystatechange=function(){  if(tempxmlhttp.readyState==4){  if(temxmlhttp.status==200){  var responseText=temxmlhttp.responseText;  var responseXML=temxmlhttp.reponseXML;  if(callback==undefined || callback==null){  alert("没有设置处理数据正确返回的方法");  alert("返回的数据:" + responseText);  }else{  callback(responseText,responseXML);  }  }else{  if(failback==undefined ||failback==null){  alert("没有设置处理数据返回失败的处理方法!");  alert("HTTP的响应码:" + tempxmlhttp.status + ",响应码的文本信息:" + tempxmlhttp.statusText);  }else{  failback(tempxmlhttp.status,tempxmlhttp.statusText);  }  }  }  }  //解决缓存的转换  if(url.indexOf("?")>=0){  url=url + "&t=" + (new Date()).valueOf();  }else{  url=url+"?+="+(new Date()).valueOf();  }  //解决跨域的问题  if(url.indexOf("http://")>=0){  url.replace("?","&");  url="Proxy?url=" +url;  }  this.xmlhttp.open(method,url,true);  //如果是POST方式,需要设置请求头  if(method=="POST"){  this.xmlhttp.setRequestHeader("Content-type","application/x-www-four-urlencoded");  }  this.xmlhttp.send(data);  }else{  alert("XMLHttpRequest对象创建失败,无法发送数据!");  }  MyXMLHttpRequest.prototype.abort=function(){  this.xmlhttp.abort();  }  }  
}  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88

ajax的优点

Ajax的给我们带来的好处大家基本上都深有体会,在这里我只简单的讲几点:

<1>.无刷新更新数据。
AJAX最大优点就是能在不刷新整个页面的前提下与服务器通信维护数据。这使得Web应用程序更为迅捷地响应用户交互,并避免了在网络上发送那些没有改变的信息,减少用户等待时间,带来非常好的用户体验。

<2>.异步与服务器通信
AJAX使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。优化了Browser和Server之间的沟通,减少不必要的数据传输、时间及降低网络上数据流量。

<3>.前端和后端负载平衡。
AJAX可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,AJAX的原则是“按需取数据”,可以最大程度的减少冗余请求和响应对服务器造成的负担,提升站点性能。

<4>.基于标准被广泛支持。
AJAX基于标准化的并被广泛支持的技术,不需要下载浏览器插件或者小程序,但需要客户允许JavaScript在浏览器上执行。随着Ajax的成熟,一些简化Ajax使用方法的程序库也相继问世。同样,也出现了另一种辅助程序设计的技术,为那些不支持JavaScript的用户提供替代功能。

<5>.界面与应用分离。
Ajax使WEB中的界面与应用分离(也可以说是数据与呈现分离),有利于分工合作、减少非技术人员对页面的修改造成的WEB应用程序错误、提高效率、也更加适用于现在的发布系统。


AJAX的缺点

<1>.AJAX干掉了Back和History功能,即对浏览器机制的破坏。
在动态更新页面的情况下,用户无法回到前一个页面状态,因为浏览器仅能记忆历史记录中的静态页面。一个被完整读入的页面与一个已经被动态修改过的页面之间的差别非常微妙;用户通常会希望单击后退按钮能够取消他们的前一次操作,但是在Ajax应用程序中,这将无法实现。

<2>.AJAX的安全问题。
AJAX技术给用户带来很好的用户体验的同时也对IT企业带来了新的安全威胁,Ajax技术就如同对企业数据建立了一个直接通道。这使得开发者在不经意间会暴露比以前更多的数据和服务器逻辑。Ajax的逻辑可以对客户端的安全扫描技术隐藏起来,允许黑客从远端服务器上建立新的攻击。还有Ajax也难以避免一些已知的安全弱点,诸如跨站点脚步攻击、SQL注入攻击和基于Credentials的安全漏洞等等。

<3>.对搜索引擎支持较弱。
对搜索引擎的支持比较弱。如果使用不当,AJAX会增大网络数据的流量,从而降低整个系统的性能。

<4>.破坏程序的异常处理机制。
至少从目前看来,像Ajax.dll,Ajaxpro.dll这些Ajax框架是会破坏程序的异常机制的。关于这个问题,曾在开发过程中遇到过,但是查了一下网上几乎没有相关的介绍。后来做了一次试验,分别采用Ajax和传统的form提交的模式来删除一条数据……给我们的调试带来了很大的困难。

<5>.违背URL和资源定位的初衷。
例如,我给你一个URL地址,如果采用了Ajax技术,也许你在该URL地址下面看到的和我在这个URL地址下看到的内容是不同的。这个和资源定位的初衷是相背离的。

<6>.AJAX不能很好支持移动设备
一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax,比如说我们在手机的浏览器上打开采用Ajax技术的网站时,它目前是不支持的。

<7>.客户端过肥,太多客户端代码造成开发上的成本。
编写复杂、容易出错 ;冗余代码比较多(层层包含js文件是AJAX的通病,再加上以往的很多服务端代码现在放到了客户端);破坏了Web的原有标准。


AJAX注意点及适用和不适用场景

注意点

Ajax开发时,网络延迟——即用户发出请求到服务器发出响应之间的间隔——需要慎重考虑。不给予用户明确的回应,没有恰当的预读数据,或者对XMLHttpRequest的不恰当处理,都会使用户感到延迟,这是用户不希望看到的,也是他们无法理解的。通常的解决方案是,使用一个可视化的组件来告诉用户系统正在进行后台操作并且正在读取数据和内容。

Ajax适用场景

<1>.表单驱动的交互
<2>.深层次的树的导航
<3>.快速的用户与用户间的交流响应
<4>.类似投票、yes/no等无关痛痒的场景
<5>.对数据进行过滤和操纵相关数据的场景
<6>.普通的文本输入提示和自动完成的场景

Ajax不适用场景

<1>.部分简单的表单
<2>.搜索
<3>.基本的导航
<4>.替换大量的文本
<5>.对呈现的操纵


http://chatgpt.dhexx.cn/article/CXWnLiJP.shtml

相关文章

AJAX常见面试题(修订版)

前言 只有光头才能变强。 文本已收录至我的GitHub仓库&#xff0c;欢迎Star&#xff1a;https://github.com/ZhongFuCheng3y/3y AJAX常见面试题 什么是AJAX&#xff0c;为什么要使用Ajax AJAX是“Asynchronous JavaScript and XML”的缩写。他是指一种创建交互式网页应用的网…

AJAX面试题都在这里

AJAX常见面试题 什么是AJAX&#xff0c;为什么要使用Ajax AJAX是“Asynchronous JavaScript and XML”的缩写。他是指一种创建交互式网页应用的网页开发技术。、 客户端与服务器&#xff0c;可以在【不必刷新整个浏览器】的情况下&#xff0c;与服务器进行异步通讯的技术 AJAX应…

SQL Server2016安装教程

安装前先关闭杀毒软件和360卫士&#xff0c;注意安装路径不能有中文&#xff0c;安装包路径也不要有中文。 注意&#xff1a;安装过程需要电脑连接网络&#xff0c;中途不能断网。 说明&#xff1a;需要安装SQL全部功能则需要先安装JDK&#xff0c;若只需要安装数据库功能的话则…

SQLServer2019安装教程

有手就行的SQL Server 2019超超超超级详细安装教程&#xff0c;你学会了吗&#xff1f; 1. 百度搜索SQL Server进入官网 https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2. 进入首页后鼠标下滑可以看见两个免费版本的sql server&#xff0c;选择需要的版…

SQL server 2017安装教程

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;实用工具&#x1f947; &#x1f4ac;个人格言&#xff1a;不断的翻越一座又一座的高山&#xf…

SqlServer2019安装教程-基本安装

SqlServer2019安装教程-自定义安装&#xff1a;https://blog.csdn.net/qq_33556442/article/details/100885939 下载SQL Server 2019 Release Candidate https://www.microsoft.com/en-us/evalcenter/evaluate-sql-server-2019-rc/ 1.点击【Continue】 2.填写资料再点击【Co…

SQL Server 2016下载及安装教程

目录 一、下载 1.sql server 2016安装包与sp2补丁 ​编辑2.管理工具 二、安装 1.sql server2016 2.补丁SP2安装 三、用管理工具连接sql 一、下载 1.sql server 2016安装包与sp2补丁 下载链接在评论中 2.管理工具 下载链接在评论中 二、安装 1.sql server2016 选中下…

SQL Server2008安装详细教程

1.将光盘文件解压成文件夹格式&#xff0c;&#xff08;解压过程比较慢&#xff0c;请耐心等待&#xff09;&#xff1b; 2.打开开始菜单的设置&#xff1b; 3.打开设置后&#xff0c;点击更新和安全&#xff0c;然后进入&#xff1b; 4.在Windows安全中心&#xff0c;将…

Sql Server 2019 详细安装教程

Sql Server 2019 详细安装教程 安装完成后校验准备需要设备检查.NET 35 环境自定 jdk 下载 安装完成后校验 该步骤请在以下步骤全部操作完成后再看 参考链接&#xff1a;Sql Server 2019 完成安装后检验使用 准备 需要设备 WIN 10 电脑一台 检查.NET 35 环境 检查.NET35…

【数据库】SQL Server2022安装教程

大家好&#xff0c;我是雷工&#xff01; 最近需要安装SQLServer数据库&#xff0c;此次安装的是sql_server_2022_developer版本&#xff0c;以下记录安装及配置过程。大家可以参考指正。 一、安装SQL Server步骤&#xff1a; 1、官网下载 SQL Server 2022 Developer。 2、打…

SQLServer安装教程(史上最详细版本)

下载 安装包已上传至百度网盘&#xff0c;安装包里已含注册码&#xff0c;下载地址&#xff08;含注册码&#xff09; 链接&#xff1a;https://pan.baidu.com/s/147YRI7DdCqTOTKfe9UNtiA 提取码&#xff1a;6txl 安装过程 1.选择解压目录 2.解压完成后&#xff0c;进入解压…

SQL Server 2008R2安装详细教程(附安装包)

许多人都在苦恼如何安装SQL server&#xff0c;或者找不着安装包&#xff0c;那么这篇文章将带您避坑&#xff0c;解决您的烦恼 安装包如下&#xff1a; 云盘链接&#xff1a; 嗨&#xff0c;请点击我&#xff01;http://pan.baidu.com/s/1_7sQ9Eky2mGogKe4W0A_6Q 提取码&#…

SQL Server安装下载教程

SQL Server安装下载教程 一、官网下载二、安装1.运行安装包&#xff0c;选择安装类型是“基本”2.选择语言3.选择安装路径4.继续安装SSMS 三、基础配置1.打开SQL Server 2019 配置管理器2.选择SQL Server 网络配置-->MSSQLSERVER的协议-->TCP/IP&#xff0c;启动它3.打开…

SQL Server 2019安装教程(图文)

本章教程&#xff0c;介绍一下SQL Server 2019的安装过程。 SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点。Microsoft SQL Server 是一个全面的数据库平台&#xff0c;使用集成的商业智能 (BI)工具提供了企业级的…

SQL Server 2019下载及安装教程

目录 一、下载 1.sql server 2019安装包 2.管理工具 二、安装 1.sql server2019 2.安装管理工具 三、用管理工具连接sql 一、下载 1.sql server 2019安装包 链接&#xff1a;https://pan.baidu.com/s/1je-24NywXCnFL0OTAMbg2w?pwd2vtv 提取码&#xff1a;2vtv 2.管理…

SqlServer 2019/2022 安装教程(图文)

一、安装sql sever 2019/2022 两个链接都可 Sqlserver2019官网 SqlServer2019下载 https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads https://www.microsoft.com/zh-cn/evalcenter/evaluate-sql-server-2019?filetype EXE1.下载exe 填写信息 2.双击运行官网…

SQL Server 下载安装教程

--------------------------2021.3.9更新---------------------------------------- 有几位读者私聊我遇到了如下问题 针对如上问题“糟糕无法安装SQLServer(setup.exe)” 可以安装如下步骤进行解决&#xff1a; 1.尝试修复 出现这种状况主要原因还是安装过程中没有完整安装或…

SQL SERVER 2019安装教程-最全安装步骤

SqlServer2019安装教程-自定义安装&#xff1a;转载 https://blog.csdn.net/qq_33556442/article/details/100885939 下载SQL Server 2019 Release Candidate https://www.microsoft.com/en-us/evalcenter/evaluate-sql-server-2019-rc/ 1.点击【Continue】 2.填写资料再点击…

sql安装步骤

SQL Server 是Microsoft 公司推出的关系型数据库管理系统。Microsoft SQL Server 是一个全面的数据库平台&#xff0c;使用集成的商业智能 (BI)工具提供了企业级的数据管理。 安装包下载链接&#xff1a;https://pan.baidu.com/s/1CRAfveNNJ20SgB2zFNIGfw 1.右击【数据库安装包…

SQL Server 2019 安装教程

SQL Server 2019 安装教程 下载安装SQL&#xff1a; 1、下载SQL Server 2019 Developer 官方网址&#xff1a;下载地址。 2、下拉选择免费版本&#xff0c;直接点击下载(别问&#xff0c;问就是家境贫寒&#x1f602;)。 3、双击启动安装文件&#xff0c;示例&#xff1a; …