轻松理解JavaScript之AJAX


Posted in Javascript onMarch 15, 2017

摘要

AJAX技术是网页构建的必备技能之一,本文希望能帮助大家轻松的学习这项技术

一、什么是ajax?

ajax(异步javascript xml) 能够刷新局部网页数据而不是重新加载整个网页。

二、如何使用ajax?

第一步:创建xmlhttprequest对象

创建xmlhttprequest对象,XMLHttpRequest对象用来和服务器交换数据。

var xmlhttp =new XMLHttpRequest();

第二步:注册回调函数

onreadystatechange函数,当服务器响应请求并返回数据后,我们想要客户端处理这些数据就需要使用onreadystatechange函数,每次xmlhttprequest对象的readyState发生改变都会触发onreadystatechange函数。对于readyState会在下一章节详细介绍。

xmlHttp.onreadystatechange= callback;
  function callback(){}

第三步:配置和发送请求

使用xmlhttprequest对象的open()和send()方法配置和发送资源请求给服务器。

xmlhttp.open(method,url,async) method包括get 和post,url主要是文件或资源的路径,async参数为true(代表异步)或者false(代表同步)

xmlhttp.send();使用get方法发送请求到服务器。

xmlhttp.send(string);使用post方法发送请求到服务器。

post表单数据需要使用xmlhttprequest对象的setRequestHeader方法增加一个HTTP头。

post 发送请求什么时候能够使用呢?

(1)更新一个文件或者数据库的时候。

(2)发送大量数据到服务器,因为post请求没有字符限制。

(3)发送用户输入的加密数据。

xhttp.open("POST", "ajax_test.aspx", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("fname=Henry&lname=Ford");

第四步:处理响应数据

使用xmlhttprequest对象的responseText或responseXML属性获得服务器的响应。

使用responseText属性得到服务器响应的字符串数据,使用responseXML属性得到服务器响应的XML数据。

在回调函数中使用readyState==4和status==200判断交互是否结束,响应是否正确,并根据需要获取服务器端返回的数据,更新页面内容。

function callback(){
  if(xmlHttp.readyState == 4){
   //判断交互是否成功
   if(xmlHttp.status == 200){
    //获取服务器返回的数据
    //获取纯文本数据
    var responseText =xmlHttp.responseText;
    document.getElementById("info").innerHTML = responseText;
   }
  }
}

三、AJAX运行过程中5种状态(readyState)

在AJAX实际运行当中,对于访问XMLHttpRequest(XHR)时并不是一次完成的,而是分别经历了多种状态后取得的结果,对于这种状态在AJAX中共有5种,这五种状态是由AJAX引擎切换设置的,分别是。

0 : 定义了XHR,但还未初始化

1 :调用send()方法,正在发送请求,请求发送完毕后,开始等待接收响应

2 :响应接收完成

3 :正在解析响应内容

4 :响应内容解析完成,返回给客户端调用

对于上面的状态,其中“0”状态是在定义后自动具有的状态值,而对于成功访问的状态(得到信息)我们大多数采用“4”进行判断。

值得注意的是,状态每切换一次,都会触发onreadystatechange 事件,所以整个过程onreadystatechange 事件被触发5次

四、AJAX的优缺点

优点

1、最大的一点是页面无刷新,在页面内与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力给用户的体验非常好。

2、减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。

缺点

1、ajax干掉了back按钮,即对浏览器后退机制的破坏。

2、对搜索引擎的支持比较弱。

 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
Javascript将string类型转换int类型
Dec 09 Javascript
javascript 保存文件到本地实现方法
Nov 29 Javascript
JS中setTimeout()的用法详解
Apr 14 Javascript
Javascript变量作用域详解
Dec 06 Javascript
jquery选择器简述
Aug 31 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
Nov 26 Javascript
js 求时间差的实现代码
Apr 26 Javascript
jQuery实现页面评论栏中访客信息自动填写功能的方法
May 23 Javascript
jQuery的Read()方法代替原生JS详解
Nov 08 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
Feb 24 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
Apr 04 Javascript
JavaScript浅层克隆与深度克隆示例详解
Sep 01 Javascript
jQuery插件ContextMenu自定义图标
Mar 15 #Javascript
JavaScript对象引用与赋值实例详解
Mar 15 #Javascript
jQuery图片瀑布流的简单实现代码
Mar 15 #Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
Mar 15 #Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
Mar 15 #Javascript
js中的触发事件对象event.srcElement与event.target详解
Mar 15 #Javascript
jQuery动态产生select option下拉列表
Mar 15 #Javascript
You might like
php实现支持中文的文件下载功能示例
2017/08/30 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
七个很有意思的PHP函数
2014/05/12 Javascript
JQuery实现表格动态增加行并对新行添加事件
2014/07/30 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
推荐10 款 SVG 动画的 JavaScript 库
2015/03/24 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
jQuery实现的分子运动小球碰撞效果
2016/01/27 Javascript
实践中学习AngularJS表单
2016/03/21 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
2016/12/26 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
create-react-app中添加less支持的实现
2019/11/15 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
pygame游戏之旅 添加icon和bgm音效的方法
2018/11/21 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
Python 给定的经纬度标注在地图上的实现方法
2019/07/05 Python
python实现车牌识别的示例代码
2019/08/05 Python
python用requests实现http请求代码实例
2019/10/31 Python
你可能不知道的Python 技巧小结
2020/01/29 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
2020/07/20 Python
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
如何提高SQL Server的安全性
2016/07/25 面试题
会计专业毕业生推荐信
2013/11/05 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
入党函调证明材料
2015/06/19 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书
win10以太网连接不上怎么办?Win10连接以太网详细教程
2022/04/08 数码科技