目录

前言

大家好呀,我是 白墨,一个热爱学习与划水的矛盾体。

以前学习Ajax时老师只是在将JQuery的时候简单的用了一下,浅尝辄止。课后也没有深入去了解过,连使用都很不熟练。我甚至一度以为Ajax是JQuery独有的东西……

今天重新学习了一下,总算理清楚了Ajax是什么东西,以及该怎么使用。

先简单做一个笔记加深记忆,搬运居多,未来深入了解以后再进行补充。


正文

Ajax是什么东西?

AJAX 可以在不重新加载整个页面的情况下与服务器交换数据并更新部分网页

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

AJAX 不是新的编程语言,而是一种使用现有标准的新方法。


实现核心/工作原理:XMLHttpRequest对象

XMLHttpRequest 是 AJAX 的基础。

请求的发送与响应数据的接收都是使用XMLHttpRequest 对象。

所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。

XMLHttpRequest大致用法

  1. 创建XMLHttpRequest 对象
  2. 发送请求使用open()send()方法
  3. 获得来自服务器的响应,使用XMLHttpRequest 对象的responseTextresponseXML属性
  4. 服务器响应的数据的处理,使用XMLHttpRequest 对象的onreadystatechange属性

创建XMLHttpRequest对象

创建 XMLHttpRequest 对象的语法:variable=new XMLHttpRequest();

老版本的IE5和IE6使用 ActiveX 对象:variable=new ActiveXObject("Microsoft.XMLHTTP");

所以如果想兼容IE5 和 IE6 需要先判断浏览器版本再创建相应的对象。(话说这么老的浏览器真的需要兼容吗?)

var xmlhttp;
if (window.XMLHttpRequest){ //判断浏览器版本
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();//创建XMLHttpRequest对象
}else{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");//创建ActiveXObject对象
}

发送请求

使用 XMLHttpRequest 对象的 open() 和 send() 方法向服务器发送请求:

//GET 请求
xmlhttp.open("GET","test1.txt?key=value",true);
xmlhttp.send();
//POST 请求
xmlhttp.open("POST","ajax_test.asp",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");//请求头
xmlhttp.send("fname=Bill&lname=Gates");//数据

方法与参数解释

方法 描述
open(method,url,async) 规定请求的类型、URL以及是否异步处理请求。
method:请求的类型;GET 或 POST
url:文件在服务器上的位置
async:true(异步)或 false(同步)
send(string) 将请求发送到服务器。
string:仅用于 POST 请求,GET请求参数放在 URL 中
setRequestHeader(header,value) 向请求添加 HTTP 头。
header: 规定头的名称
value: 规定头的值

AJAX 指的是异步 JavaScript 和 XML(Asynchronous JavaScript and XML)。

XMLHttpRequest 对象如果要用于 AJAX 的话,其open()方法的async参数必须设置为true

所以XMLHttpRequest是实现AJAX的技术,而不是AJAX,切勿弄混。

注:如果async参数设置为false,即为非异步,JavaScript 会等到服务器响应就绪才继续执行。如果服务器繁忙或缓慢,应用程序会挂起或停止。


服务器响应

获得来自服务器的响应,主要使用XMLHttpRequest对象的responseTextresponseXML属性。

1. responseText属性

获得字符串形式的响应数据,直接作为字符串使用。

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

2. responseXML属性

获得 XML 形式的响应数据,需要作为 XML 对象进行解析。

xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++){
txt=txt + x[i].childNodes[0].nodeValue + "<br />";
}
document.getElementById("myDiv").innerHTML=txt;

数据处理

当请求被发送到服务器时,我们需要执行一些基于响应的任务,主要使用XMLHttpRequest对象的readyState属性和onreadystatechange事件属性。

1. readyState 属性

readyState属性翻译过来是就绪状态,存有 XMLHttpRequest 的状态信息,从 0 到 4 发生变化。

0: 请求未初始化

1: 服务器连接已建立

2: 请求已接收

3: 请求处理中

4: 请求已完成,且响应已就绪

每当readyState改变时,就会触发onreadystatechange事件,所以这两个要结合使用,下面介绍 onreadystatechange 。

2. onreadystatechange 事件属性

onreadystatechange事件用于存储函数(或函数名),每当readyState属性改变时,就会调用该函数。

onreadystatechange事件会被触发 5 次(0 - 4),对应着readyState的每个变化。

3. status 属性

XMLHttpRequest 还有一个重要属性:status

status属性表示HTTP请求的返回状态码,因为 XMLHttpRequest 也是请求的一个网页,所以它的含义和传统网页相同。

200:正常返回

404:找不到网页

500:服务器内部错误

接下来结合使用:

//当使用 async=true 时,为onreadystatechange设置函数
xmlhttp.onreadystatechange=function(){
//当 readyState 等于 4 且状态为 200 时,表示响应已就绪
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","test1.txt",true);//async=true
xmlhttp.send();

注:异步才需要使用onreadystatechange,即open()方法的async参数设置为true时。如果asyncfalse,把代码放到send()语句后面即可。

//当使用 async=false 时,代码直接往后放
xmlhttp.open("GET","test1.txt",false);
xmlhttp.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

到这里XMLHttpRequest已经学得差不多了。后面是补充内容。


Callback 函数(回调函数)

回调函数这玩意儿我还没搞清楚

但是并不影响我写文,哈哈哈哈哈哈

callback 函数是一种以参数形式传递给另一个函数的函数。

如果网站上存在多个 AJAX 任务,就应该为创建 XMLHttpRequest 对象编写一个标准的函数,并为每个 AJAX 任务调用该函数。

//该函数调用应该包含 URL 以及发生 onreadystatechange 事件时执行的任务(每次调用可能不尽相同):
function myFunction(){
loadXMLDoc("/ajax/test1.txt",function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
});
}

>>W3S实例<<


面试题

1. Ajax是什么?

  1. AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

  2. Ajax 是一种用于创建快速动态网页的技术。传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

  3. Ajax是采用了异步请求的方式,解决了页面无刷新式提交的问题,改善了页面的用户体验效果;常用自动完成提示,注册时用户名重复性校验。

  4. 常用的Ajax框架: Jquery中的ajax

总结:AJAX直译为异步的JavaScript和XML,是一种异步提交、局部刷新的网页编程技术。


2. Ajax的优缺点?(请谈一下你对Ajax的认识)

优点:(为什么要使用Ajax?)

  1. 改善用户体验。 局部刷新页面,减少用户心理和实际的等待时间,带来更好的用户体验。
  2. 减轻服务器的负担。 按需取数据,最大程度的减少冗余请求,降低服务器端处理开销。
  3. 基于xml标准化,并被广泛支持,不需安装插件等,进一步促进页面和数据的分离。

缺点:

  1. 存在浏览器兼容性问题。 Ajax大量的使用了javascript和ajax引擎,这些取决于浏览器的支持,在编写的时候要考虑对浏览器的兼容性。
  2. 破坏了浏览器的前进、后退功能。 AJAX只是局部刷新,所以页面的后退按钮是没有用的。
  3. 对搜索引擎不友好。 搜索引擎会屏蔽掉所有js代码,所以ajax载入的的信息不会被搜索引擎收录。
  4. 对流媒体还有移动设备的支持不是太好等。

3. HTTP状态码

200 服务器成功返回页面

404 请求的网页不存在

503 服务不可用

100-199 用于指定客户端相应的某些动作。

200-299 用于表示请求成功

300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息

400-499 用于支出客户端的错误

500-599 用于支持服务错误


4. Ajax的工作原理

  1. 创建ajax对象 XMLHttpRequest/ActiveXObject(Microsoft.XMLHttp)
  2. 判断数据传输方式 GET/POST
  3. 打开链接 open()
  4. 发送 send()
  5. 当ajax对象完成第四步(onreadystatechange)数据接收完成,判断http响应状态(status)200-300之间或者304(缓存)执行回调函数

5. Ajax的最大的特点是什么?

Ajax可以实现异步提交、局部刷新,这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。


6. 请介绍一下XmlHttpRequest对象?

Ajax的核心是JavaScript对象XmlHttpRequest,它是一种支持异步请求的技术。XmlHttpRequest可以使得程序员使用JavaScript向服务器进行请求并处理响应,而不阻塞用户。通过XMLHttpRequest对象,Web开发人员可以在页面加载以后进行页面的局部更新。

AJAX开始流行始于Google在2005年使用的”Google Suggest”。

“Google Suggest”就是使用XMLHttpRequest对象来创建动态的Web接口:

当用户开始输入google的搜索框,Javascript发送用户输入的字符到服务器,然后服务器返回一个建议列表。

XMLHttpRequest对象在IE5.0+, Safari 1.2, Mozilla 1.0/Firefox, Opera 8+ 和NetScapt7 开始被支持。


7. 在浏览器端如何得到服务器端响应的XML数据

XMLHttpRequest对象的responseXMl属性


8. XMLHttpRequest对象在IE和Firefox中创建方式有没有不同?

IE中通过new ActiveXObject()创建,Firefox中通过new XMLHttpRequest()创建


9. 介绍一下XMLHttpRequest对象的常用方法和属性(回答的越多越好)

open()方法:建立对服务器的调用。

send()方法:发送具体请求

abort()方法:停止当前请求

readyState属性:返回请求的状态

responseText属性:服务器端响应的文本

reponseXML属性:服务器端响应的XML

Status:服务器的HTTP状态码


10. Ajax技术体系的组成部分有哪些?

HTML,css,dom,xml,xmlHttpRequest,javascript


11. AJAX应用和传统Web应用有什么不同?

简洁陈述版:

在传统的Web应用的请求/响应为同步模式。即当服务器端在处理客户端请求时,客户端需要等待,直到服务器端响应返回后,客户端才能继续执行。

而AJAX应用的请求/响应为异步模式,即当服务器端在处理客户端请求时,客户端无须等待可以继续执行;当服务器端响应返回后,客户端进行局部刷新。

详细说明版:

在传统的Javascript编程中,如果想得到服务器端数据库或文件上的信息,或者发送客户端信息到服务器,需要建立一个HTML form然后GET或者POST数据到服务器端。用户需要点击"Submit"按钮来发送或者接受数据信息,然后等待服务器响应请求,页面重新加载。

因为服务器每次都会返回一个新的页面, 所以传统的web应用有可能很慢而且用户交互不友好。

使用AJAX技术, 就可以使Javascript通过XMLHttpRequest对象直接与服务器进行交互。

通过HTTP Request, 一个web页面可以发送一个请求到web服务器并且接受web服务器返回的信息(不用重新加载页面),展示给用户的还是同一个页面,用户感觉页面刷新,也看不到到Javascript后台进行的发送请求和接受响应。


12. AJAX请求总共有多少种CALLBACK

Ajax请求总共有八种Callback

  • onSuccess
  • onFailure
  • onUninitialized
  • onLoading
  • onLoaded
  • onInteractive
  • onComplete
  • onException

13. Ajax和javascript的区别?

javascript是一种在浏览器端执行的脚本语言,Ajax是一种创建交互式网页应用的开发技术 ,它利用了一系列相关的技术,其中就包括javascript。


14. 如果熟悉某种ajax框架,他可能会问到怎样在程序中使用这种框架。

ASP.NETAjax集成了一套客户端脚本库使得与功能丰富的、基于服务器开发平台的ASP.NET结合在一起。其服务器端编程模型相对于客户端编程模型较为简单,而且容易与现有的ASP.NET程序相结合,通常实现复杂的功能只需要在页面中拖几个控件,而不必了解深层次的工作原理,除此之外服务器端编程的ASP.NETAJAXControlToolkit含有大量的独立AJAX控件和对ASP.NET原有服务器控件的AJAX功能扩展。


15. 编程题:写出一个简单的$.ajax()的请求方式?( JQuery 的 Ajax 模板)

$.ajax({
url:'http://www.baidu.com', //请求地址
type:'POST', //Post请求
data:data, //请求的同时传递过去的数据
cache:true, //是否高速缓存此页
headers:{},
dataType:’json’, //返回数据类型:xml/json/html/script…
beforeSend:function(){}, //在发送请求前执行的函数
success:function(){}, //请求成功后的回调函数
error:function(){}, //请求失败时调用的函数
complete:function(){} //请求完成后回调函数
});

成文参考资料

W3S AJAX 教程Statue属性


后记

好啦,本文到此结束!如果对你有帮助,可以给我点赞+收藏+关注!你的鼓励是我更新的动力!

一文搞懂Ajax,附Ajax面试题的更多相关文章

  1. 一文搞懂所有Java集合面试题

    Java集合 刚刚经历过秋招,看了大量的面经,顺便将常见的Java集合常考知识点总结了一下,并根据被问到的频率大致做了一个标注.一颗星表示知识点需要了解,被问到的频率不高,面试时起码能说个差不多.两颗 ...

  2. Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!

    本文原作者: Wizey,作者博客:http://wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享. 1.引言 典型的Web端即时通讯技术应用场景,主要有以下两种形式 ...

  3. 一文搞懂RAM、ROM、SDRAM、DRAM、DDR、flash等存储介质

    一文搞懂RAM.ROM.SDRAM.DRAM.DDR.flash等存储介质 存储介质基本分类:ROM和RAM RAM:随机访问存储器(Random Access Memory),易失性.是与CPU直接 ...

  4. 基础篇|一文搞懂RNN(循环神经网络)

    基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...

  5. 一文搞懂 Prometheus 的直方图

    原文链接:一文搞懂 Prometheus 的直方图 Prometheus 中提供了四种指标类型(参考:Prometheus 的指标类型),其中直方图(Histogram)和摘要(Summary)是最复 ...

  6. 一文搞懂vim复制粘贴

    转载自本人独立博客https://liushiming.cn/2020/01/18/copy-and-paste-in-vim/ 概述 复制粘贴是文本编辑最常用的功能,但是在vim中复制粘贴还是有点麻 ...

  7. 三文搞懂学会Docker容器技术(中)

    接着上面一篇:三文搞懂学会Docker容器技术(上) 6,Docker容器 6.1 创建并启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] --na ...

  8. 三文搞懂学会Docker容器技术(下)

    接着上面一篇:三文搞懂学会Docker容器技术(上) 三文搞懂学会Docker容器技术(中) 7,Docker容器目录挂载 7.1 简介 容器目录挂载: 我们可以在创建容器的时候,将宿主机的目录与容器 ...

  9. 一文搞懂 js 中的各种 for 循环的不同之处

    一文搞懂 js 中的各种 for 循环的不同之处 See the Pen for...in vs for...of by xgqfrms (@xgqfrms) on CodePen. for &quo ...

  10. 一文搞懂如何使用Node.js进行TCP网络通信

    摘要: 网络是通信互联的基础,Node.js提供了net.http.dgram等模块,分别用来实现TCP.HTTP.UDP的通信,本文主要对使用Node.js的TCP通信部份进行实践记录. 本文分享自 ...

随机推荐

  1. hdu4784 不错的搜索( 买卖盐,要求整钱最多)

    题意:       给你一个有向图,每个节点上都有一个盐价,然后给你k个空间,么个空间上节点与节点的距离不变,但盐价不同,对于每一个节点,有三种操作,卖一袋盐,买一袋盐 ,不交易,每一个节点可以跳掉( ...

  2. Python中的socket网络模块

    目录 Socket 服务端(server.py) 客户端(client.py) socket中的一些常用方法 Socket 对象(内建)方法 Python Internet 模块 Python3 提供 ...

  3. 微服务架构开发电商系统需要用Redis、ES和MQ吗?

    如果不用什么很高大上的东西,就是有多个微服务就行这种技术架构会很难吗? 我看了一些视频,他们都用到了es.mq.redis的东西,我想不用这些东西,就简单的有多个服务,这样可行吗? 01 使用微服务你 ...

  4. Linux 内核调度器源码分析 - 初始化

    导语 上篇系列文 混部之殇-论云原生资源隔离技术之CPU隔离(一) 介绍了云原生混部场景中CPU资源隔离核心技术:内核调度器,本系列文章<Linux内核调度器源码分析>将从源码的角度剖析内 ...

  5. svg web拓扑更新了,支持动态添加svg组件

    版本1.0请点此 预览地址 https://svg.yaolunmao.top 如何使用 # 克隆项目 git clone https://github.com/yaolunmao/vue-webto ...

  6. IP包头部格式解析

    IPv4首部一般是20字节长.在以太网帧中,IPv4包首部紧跟着以太网帧首部,同时以太网帧首部中的协议类型值设置为080016. IPv4提供不同,大部分是很少用的选项,使得IPv4包首部最长可扩展到 ...

  7. Alpha事后分析

    设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件的功能主要是让一些基于表单识别的项目(如微软智能表单识别项目)减少在数据生成方面上浪费的 ...

  8. I/O流以及文件的基本操作

    文件操作: 文件操作其实就是一个FIle类:我们学习文件操作就是学习File类中的方法: 文件基操: 第一部分:学习文件的基本操作(先扒源码以及文档) Constructor Description ...

  9. yiled

    def fib(max): n,a,b = 0,0,1 while n < max: print("hallo") yield b #把函数执行过程冻结在这一步,并且把b的值 ...

  10. 《前端运维》一、Linux基础--03Shell基础及补充

    诶诶欸?不是学Linux么?怎么要讲shell了?shell是啥?啥是shell? 别急,我们先简单了解下shell是什么.Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁. ...