你真的了解Ajax吗?

Posted 程序猿热点

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你真的了解Ajax吗?相关的知识,希望对你有一定的参考价值。

点击上方蓝色字体,欢迎关注微信公众号。

人人都说自己会 AJAX,那么你能说清楚什么是 AJAX 吗?

----------------

简单一句话,AJAX 就是用 JS 向服务端发起一个请求,并获取服务器返回的内容。

就这么简单?是的。

下面完整的介绍。

AJAX 之前的时代

在 AJAX 被发明之前,浏览器是怎么发起请求的?

  1. a 标签。用户点击页面中的 a 链接,也会发起一个请求。(同时页面刷新)

  2. img 标签。页面中如果有 img 标签,那么就会发起一个对此图片的请求(页面没有刷新,但是只能请求图片)类似的还有 link 标签、script 标签,都可以对一类文件的请求。

为什么我们需要 AJAX?

上面列举的请求发起方式,要么会导致页面刷新,要么只能请求特定类型的文件(图片、CSS 或 JS)。

Gmail 这类复杂的网页应用非常需要一个「可以请求任意类型的数据,并获取数据内容」的方案。

当时微软极具创新意识地提供了一个私有接口 ActiveXObject("Microsoft.XMLHTTP"),并在 IE 5.0 中开放给开发者用。

Gmail 的开发者发现这个接口之后如获至宝,并借此完成了第一个著名的 AJAX 应用——Gmail,用户可以在一个页面里完成收发邮件、设置过滤规则等复杂的功能。

从此,AJAX 成了前端开发者必会的技能。

大白话解释什么是Ajax:

大学毕业拍毕业照,全班30人,一共去了29人。可是拍完之后,没参与照相的同学也想出现在照片中,该怎么办呢?


传统方式:大家再召集一次,重新拍一张。


Ajax:把这名同学PS进去


这就是Ajax的特点:


可以在不重新召集所有同学拍照的情况下,对照片的部分进行更新。


可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

(重新拍照理解为重新加载网页)

Ajax的使用

以下步骤,如果不能理解你死记硬背都要记下来,总比你答不出来要好吧!

1.创建Ajax核心对象XMLHttpRequest

[javascript]view plaincopy

  1. var xmlhttp;

  2. if (window.XMLHttpRequest)

  3. {// 兼容 IE7+, Firefox, Chrome, Opera, Safari

  4. xmlhttp=new XMLHttpRequest();

  5. }

  6. else

  7. {// 兼容 IE6, IE5

  8. xmlhttp=newActiveXObject("Microsoft.XMLHTTP");

  9. }

2.向服务器发送请求 
[javascript]view plaincopy

  1. xmlhttp.open(method,url,async);

  2. send(string)

注意:open 的参数要牢记,很多面试官爱问这样的细节

  • method:请求的类型;GET 或 POST

  • url:文件在服务器上的位置

  • async:true(异步)或 false(同步)

send(string)方法post请求时才使用字符串参数,否则不用带参数。

注意:post请求一定要设置请求头的格式内容

[javascript]view plaincopy

  1. xmlhttp.open("POST","ajax_test.html",true);

  2. xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

  3. xmlhttp.send("fname=Henry&lname=Ford");

3.服务器响应处理

responseText 获得字符串形式的响应数据。

responseXML 获得XML 形式的响应数据。

3.1 同步处理

[javascript]view plaincopy

  1. xmlhttp.open("GET","ajax_info.txt",false);

  2. xmlhttp.send();

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

直接在send()后面处理返回来的数据。

3.2 异步处理

异步处理相对比较麻烦,要在请求状态改变事件中处理。

[javascript]view plain copy
  1. xmlhttp.onreadystatechange=function()

  2. {

  3. if (xmlhttp.readyState==4 &&xmlhttp.status==200)

  4. {

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

  6. }

  7. }

一共有5中请求状态,从0 到 4 发生变化。

0: 请求未初始化

1: 服务器连接已建立

2: 请求已接收

3: 请求处理中

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

xmlhttp.status:响应状态码。这个也是面试比较爱问的,这个必须知道4个以上,比较常见的有:

200: "OK"

403 (禁止) 服务器拒绝请求。

404 (未找到) 服务器找不到请求的网页。

408 (请求超时) 服务器等候请求时发生超时。

500 (服务器内部错误) 服务器遇到错误,无法完成请求。


如果大家喜欢这篇文章请分享或点赞,您的支持就是我创作的动力!


其实学好技术并不难,架构师免费分享全网全套最新web前端、JavaScript、HTML5、php、数据库。。。等视频资料!


以上是关于你真的了解Ajax吗?的主要内容,如果未能解决你的问题,请参考以下文章

你真的了解 defer 吗?

每天都在敲的sudo命令,你真的了解吗

[py]你真的了解多核处理器吗? 了解多线程

你真的了解mongoose吗?

04-字典集合,你真的了解吗

JavaScript你真的了解节点操作吗?