轻松理解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 相关文章推荐
jquery中ajax学习笔记一
Oct 16 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
Jan 13 Javascript
JavaScript将Table导出到Excel实现思路及代码
Mar 13 Javascript
jQuery contains过滤器实现精确匹配使用方法
Apr 12 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
Aug 18 Javascript
CSS3,HTML5和jQuery搜索框集锦
Dec 02 Javascript
ES6的新特性概览
Mar 10 Javascript
JavaScript判断数字是否为质数的方法汇总
Jun 02 Javascript
JavaScript对象创建模式实例汇总
Oct 03 Javascript
学习jQuery中的noConflict()用法
Sep 28 jQuery
Django+vue跨域问题解决的详细步骤
Jan 20 Javascript
JavaScript实现留言板案例
Mar 17 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桌面中心(一) 创建数据库
2007/03/11 PHP
php二分法在IP地址查询中的应用
2008/08/12 PHP
php 可变函数使用小结
2018/06/12 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
动手学习无线电
2021/03/10 无线电
javascript函数重载解决方案分享
2014/02/19 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
js导出excel文件的简洁方法(推荐)
2016/11/02 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
jQuery EasyUi 验证功能实例解析
2017/01/06 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
uploader秒传图片到服务器完整代码
2017/04/22 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
Node.js连接Sql Server 2008及数据层封装详解
2018/08/27 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
2019/04/30 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
Vue监听滚动实现锚点定位(双向)示例
2019/11/13 Javascript
javascript运行机制之执行顺序理解
2020/08/03 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
python字符类型的一些方法小结
2016/05/16 Python
Python中二维列表如何获取子区域元素的组成
2017/01/19 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
2019/10/14 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
阿迪达斯墨西哥官方网站:adidas墨西哥
2017/11/03 全球购物
部门经理迟到检讨书
2015/02/16 职场文书
Python中Numpy和Matplotlib的基本使用指南
2021/11/02 Python
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL