轻松理解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 相关文章推荐
数组方法解决JS字符串连接性能问题有争议
Jan 12 Javascript
jquery的ajax简单结构示例代码
Feb 17 Javascript
JavaScript中的异常捕捉介绍
Dec 31 Javascript
win7下安装配置node.js+express开发环境
Dec 06 Javascript
谈一谈JS消息机制和事件机制的理解
Apr 14 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
Jun 07 Javascript
Node.js的Koa实现JWT用户认证方法
May 05 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
Oct 07 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
Nov 08 Javascript
小程序实现录音上传功能
Nov 22 Javascript
vue实现前端分页完整代码
Jun 17 Javascript
基于Electron实现桌面应用开发代码实例
Jul 07 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 使用MySQL管理Session的回调函数详解
2013/06/21 PHP
PHP实现的购物车类实例
2015/06/17 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
几种延迟加载JS代码的方法加快网页的访问速度
2013/10/12 Javascript
Javascript操作URL函数修改版
2013/11/07 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
Vue2.0 实现移动端图片上传功能
2018/05/30 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
浅析微信扫码登录原理(小结)
2018/10/29 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
layui使用label标签的方法
2019/09/14 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
JavaScript实现移动端拖动元素
2020/11/24 Javascript
python将list转为matrix的方法
2018/12/12 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
css图标制作教程制作云图标
2014/01/19 HTML / CSS
详解HTML5中的Communication API基本使用方法
2016/01/29 HTML / CSS
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
How to spawning asynchronous work in J2EE
2016/08/29 面试题
店长岗位职责
2013/11/21 职场文书
目标责任书范本
2014/04/16 职场文书
2014年档案室工作总结
2014/12/01 职场文书
支教个人总结
2015/03/04 职场文书
留学推荐信怎么写
2015/03/26 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
基于Python实现一个春节倒计时脚本
2022/01/22 Python