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 相关文章推荐
cnblogs csdn 代码运行框实现代码
Nov 02 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
Sep 11 Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
Nov 17 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
Jan 01 Javascript
基于javascript实现tab选项卡切换特效调试笔记
Mar 30 Javascript
canvas绘图不清晰的解决方案
Feb 28 Javascript
使用JavaScript实现表格编辑器(实例讲解)
Aug 02 Javascript
原生js代码能实现call和bind吗
Jul 31 Javascript
jquery实现两个div中的元素相互拖动的方法分析
Apr 05 jQuery
vue在图片上传的时候压缩图片
Nov 18 Vue.js
ztree+ajax实现文件树下载功能
May 18 Javascript
80行代码写一个Webpack插件并发布到npm
May 24 Javascript
简单谈谈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
关于PHP实现异步操作的研究
2013/02/03 PHP
php断点续传之如何分割合并文件
2014/03/22 PHP
JavaScript 自动完成脚本整理(33个)
2009/10/20 Javascript
理解Javascript_10_对象模型
2010/10/16 Javascript
JS 面向对象之神奇的prototype
2011/02/26 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
基于vue.js的分页插件详解
2017/11/27 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
vuejs前后端数据交互之从后端请求数据的实例
2018/08/11 Javascript
Vue动态加载异步组件的方法
2018/11/21 Javascript
vue实现倒计时获取验证码效果
2020/04/17 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
使用python分析git log日志示例
2014/02/27 Python
Python自定义scrapy中间模块避免重复采集的方法
2015/04/07 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
Python实现的简单模板引擎功能示例
2017/09/02 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
python try 异常处理(史上最全)
2019/03/07 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
python opencv实现图像配准与比较
2021/02/09 Python
经典c++面试题四
2015/05/14 面试题
.NET面试题:什么是反射
2016/09/30 面试题
体育教师自我鉴定
2014/02/12 职场文书
会计核算科岗位职责
2014/03/19 职场文书
党支部公开承诺践诺书
2014/03/28 职场文书
计划生育证明格式范本
2014/09/12 职场文书
2015年食堂工作总结报告
2015/04/23 职场文书
看上去很美观后感
2015/06/10 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书