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 性能优化指南 (1)
May 21 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
Sep 20 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
Aug 02 Javascript
JavaScript中判断对象类型的几种方法总结
Nov 11 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
Jun 26 Javascript
微信小程序 绘图之饼图实现
Oct 24 Javascript
JavaScript、C# URL编码、解码总结
Jan 21 Javascript
基于JavaScript实现全选、不选和反选效果
Feb 15 Javascript
JavaScript实现的简单加密解密操作示例
Jun 01 Javascript
vue代码分割的实现(codesplit)
Nov 13 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
Aug 08 Javascript
JavaScript最完整的深浅拷贝实现方式详解
Feb 28 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漏洞全解(详细介绍)
2012/11/13 PHP
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
PHP遍历数组的方法汇总
2015/04/30 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
js中复制行和删除行的操作实例
2013/06/25 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
JavaScript中的await/async的作用和用法
2016/10/31 Javascript
jquery编写日期选择器
2017/03/16 Javascript
Angular.js中定时器循环的3种方法总结
2017/04/27 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
Vue和React有哪些区别
2020/09/12 Javascript
Python反射用法实例简析
2017/12/22 Python
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
简单实现python数独游戏
2018/03/30 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
python 模拟银行转账功能过程详解
2019/08/06 Python
对python中UDP,socket的使用详解
2019/08/22 Python
python 有效的括号的实现代码示例
2019/11/11 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
会计专业毕业生自荐信范文
2013/12/20 职场文书
食品厂厂长岗位职责
2014/01/30 职场文书
前厅收银主管岗位职责
2014/02/04 职场文书
大学军训感言300字
2014/03/09 职场文书
领导接待方案
2014/03/13 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书
《女娲补天》读后感5篇
2019/12/31 职场文书
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers