Ajax的概述与实现过程


Posted in Javascript onNovember 18, 2016

一、ajax概述

1、Ajax是Asynchronous([ə'sɪŋkrənəs) JavaScript XML的简写,不是一门新技术,而是对现有技术的综合利用。这一技术能够向服务器请求额外数据而无需刷新页面,带来了更好的用户体验

2、Ajax技术的核心是XMLHttpRequest对象(简称XHR),这是由微软首先引入的一个特性。在XHR出现之前,Ajax式的通信必须借助一些hack手段来实现,大多数是使用隐藏的框架或内嵌框架。

3、XHR为向服务器发送请求和解析服务器响应提供了流畅的接口。能够以异步的方式从服务器取得更多的信息,意味着用户单击后,可以不必刷新页面也能获取新数据。也就是说可以使用XHR对象取得新数据,然后再通过DOM将新数据插入到页面中

4、虽然Ajax名字中有XML的成分,但是呢,Ajax通信与数据格式无关,这种技术就是无须刷新页面即可从服务器取得数据,但不一定是XML数据

二、操作:原生ajax和jQuery中封装的ajax

1、原生ajax:

ajax作用:发送请求(设置请求setRequest) 接收响应(getResponse)

A、ajax原生方式发送请求:

Ajax中最重要也是最固定的部分就是http请求。

1)建立连接:(IE7及以上版本都支持XMLHttpRequest)

var xhr = new XMLHttpRequest(); //创建异步请求对象

2)Get请求:格式必须是(url?name1=value1&name2=value2)

xhr.open("get","01-register.php?name="+name);//初始化异步get请求
xhr.send(null); //与服务器建立连接

3)Post请求

xhr.open('post','01-XMLHTTPRequest-test.php');//请求报文行
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); /*post请求设置请求头*/
xhr.send('name=rose&age=20'); //请求报文体

4)get和post请求的区别:

★get不需要设置请求头,而post需要设置请求头

★get的数据传递通过url进行,而post的数据在send方法中传递

B、ajax原生方式接收响应:

/*监听服务器的响应*/
xhr.onreadystatechange=function(){
/*判断当前的响应是否成功 1.服务器做出了响应 2.响应的结果是正确的*/
 if(xhr.status==200 && xhr.readyState==4){
 var result=xhr.responseText;
 console.log(result); //输出从服务器中获取到的数据
 //接下来就可以对数据进行相应的处理了
 }
 };

C、处理响应数据:

/*监听*/
 xhr.onreadystatechange=function(){
 if(xhr.status==200 && xhr.readyState==4){ /*判断状态*/
 var result;
 /*获取响应报文中的Content-Type*/
 var ct=xhr.getResponseHeader("Content-Type");
 /*判断Content-Type,进行数据的解析*/
 if(ct.indexOf("xml") != -1){
 result=xhr.responseXML;
 }
 else if(ct.indexOf("json") !=-1){
 result=JSON.parse(xhr.responseText);
 }
 else{
 result=xhr.responseText;
 }
 /*调用回调函数--委托--代理*/
 success && success(result);
 }
 };

 jQuery中封装的ajax

$.ajax({
 type: 请求方式(get/post),
 url: "register.php",
 data: 发送请求数据,
 beforeSend:function(){返回false可以取消本次ajax请求},
 success:function(result){ 成功响应后调用 },
 error:function(err){ 错误响应时调用 },
 complete:function(){ 响应完成时调用(包括成功和失败) }
 });

jQuery中提供了专门的方法来序列化表单:

 $('form').serialize():   //序列化表单(即格式化key=val & key=val);

三、响应

我们需要监听服务器的响应状态,然后对从服务器中获取的数据做相应的处理。

1)    onreadystatechange是JavaScript事件中的一种,用于监听XMLHttpRequest的状态

2)    readystate:响应状态,返回XMLHTTP请求的当前状态

readyState 状态 状态说明
(0)未初始化 此阶段确认XMLHttpRequest对象是否创建,并为调用open()方法进行未初始化作好准备。值为0表示对象已经存在,否则浏览器会报错--对象不存在。
(1)载入 此阶段对XMLHttpRequest对象进行初始化,即调用open()方法,根据参数(method,url,true)完成对象状态的设置。并调用send()方法开始向服务端发送请求。值为1表示正在向服务端发送请求。
(2)载入完成 此阶段接收服务器端的响应数据。但获得的还只是服务端响应的原始数据,并不能直接在客户端使用。值为2表示已经接收完全部响应数据。并为下一阶段对数据解析作好准备。
(3)交互 此阶段解析接收到的服务器端响应数据。即根据服务器端响应头部返回的MIME类型把数据转换成能通过responseBody、responseText或responseXML属性存取的格式,为在客户端调用作好准备。状态3表示正在解析数据。
(4)完成 此阶段确认全部数据都已经解析为客户端可用的格式,解析已经完成。值为4表示数据解析完毕,可以通过XMLHttpRequest对象的相应属性取得数据。

3)    status:服务器的响应码

常见响应码:200—服务器成功返回网页

            404—请求网页不存在

            503—服务不可用

关于服务器响应码,详情请看————网络传输协议(http协议)

以上就是本文的内容,有需要的可以看下,希望对大家有所帮助。谢谢对三水点靠木的支持!

Javascript 相关文章推荐
Jquery拖拽并简单保存的实现代码
Nov 28 Javascript
jquery的each方法使用示例分享
Mar 25 Javascript
基于JS实现的笛卡尔乘积之商品发布
May 13 Javascript
详解Angular2中Input和Output用法及示例
May 21 Javascript
使用puppeteer破解极验的滑动验证码
Feb 24 Javascript
axios 封装上传文件的请求方法
Sep 26 Javascript
基于vue.js实现分页查询功能
Dec 29 Javascript
JavaScript 扩展运算符用法实例小结【基于ES6】
Jun 17 Javascript
vue element upload组件 file-list的动态绑定实现
Oct 11 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
Nov 12 Javascript
js判断一个对象是数组(函数)的方法实例
Dec 19 Javascript
Vue接口封装的完整步骤记录
May 14 Vue.js
简单谈谈ES6的六个小特性
Nov 18 #Javascript
jQuery post数据至ashx实例详解
Nov 18 #Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
Nov 18 #Javascript
基于jQuery的checkbox全选问题分析
Nov 18 #Javascript
JavaScript动态数量的文件上传控件
Nov 18 #Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
Nov 18 #Javascript
Node.js 实现简单小说爬虫实例
Nov 18 #Javascript
You might like
DSP接收机前端设想
2021/03/02 无线电
为php4加入动态flash文件的生成的支持
2006/10/09 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
2013/12/25 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
webpack 2的react开发配置实例代码
2017/07/28 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
跟老齐学Python之for循环语句
2014/10/02 Python
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
Python 虚拟空间的使用代码详解
2019/06/10 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
解析Python3中的Import
2019/10/13 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
CSS3实现彩色进度条动画的示例
2020/10/29 HTML / CSS
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
Fox Racing官方网站:越野摩托车和山地自行车装备和服装
2019/12/23 全球购物
中软国际Java程序员机试题
2012/08/19 面试题
委托书怎么写
2014/07/31 职场文书
捐书倡议书
2014/08/29 职场文书
党在我心中的演讲稿
2014/09/13 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
群众路线党员个人整改措施
2014/10/27 职场文书
python三子棋游戏
2022/05/04 Python
python如何查找列表中元素的位置
2022/05/30 Python