ajax具体实现学习记录
记录自己对ajax\的理解,
首先要明白ajax是为了解决什么问题,简单来讲就是为了局部刷新页面,而不刷新整个界面。就比如现在有一个实时热度的显示,它是不断变化的,所以你肯定要不停的从数据库当中获取热度,进行显示,但是又只是更新热度,没有必要更新整个界面。这时候就用到了ajax,不断的向服务器发送请求,获取热度,之后使用js更新指定元素。那js是怎样更新的呢?
昂,其实直接用jquery就可以了,不过还是学习ajax肯定要对它具体是怎么实现的学习一下呀~
ajax用了 XMLHttpRequest,js,css,dom,xml等技术来实现,说下其中两个:
XMLHttpRequest:js里面的一个对象,能够进行连接服务器,发送请求等操作,可以理解为一个载体,我们所有的操作最终都是由他执行的。
xml:一种语言,其实跟html撒的差不多,只不过它是用来描述结构化数据的的格式,相当于就是存储交换的数据的一种格式,可扩展性更强一些,有它独特的数据结构格式。
下面来看看他的具体步骤吧:分为以下:
1.构建XMLHttpRequest对象
2.设置回调函数
3.和服务器创建连接
4.发送请求
1.构建XMLHttpRequest对象
这一步需要注意的就是ie浏览器和其他浏览器的创建方式的不同,普通浏览器直接创建该对象,而ie浏览器创建ActiveObject对象,并设置响应的参数,代码如下, 很容易理解
if(window.XMLHttpRequest){ //非Ie浏览器
this.req = new XMLHttpRequest();
}else if(window.ActiveXObject){
this.req = new ActiveXObject("Microsoft.XMlHTTP");
}
,创建结束之后,我们就需要调用该对象的方法来完成异步请求了,我们会用到它的open和send方法,
open("method","url",【asyncFlag】,【username】,【password】);
method:请求的方式,get或者post
后面三个为可选参数,asynvFlag 表示是否异步请求,一般是true
send(params);
将当前连接中的请求发送给服务器,异步的直接返回,同步的话等待响应结束再返回,params是参数,post请求时候用的,另外注意,发送post请求时,要使用 setRequestHeader("Content-Type","application/x-www-form-urlencoded");设置请求头参数
还有他的4个属性:
readyState: 请求的状态,从0-4 依次表示:未初始化,加载中,加载完毕,交互中,完成
status: 服务器返回的Http状态码,
responseText,responseXML:服务器返回的内容,xml格式或者字符串格式的,json也可以返回
2.指定回调函数:
回调函数,顾名思义,就是服务器处理完请求之后执行的函数,相当于具体的业务逻辑函数。
XMLHttpRequest.onreadystatechange = 函数名;
这里注意一点:如果是该函数有参数,这样写:
..... = function(){ 函数名(params)};
3.建立与服务器的连接
使用open()函数就行,url就是你请求的服务器地址
4.发送请求,
直接send(null),post请求的话使用send(params),params的格式就是 变量名=具体值&变量名=具体值,这样的,用&分隔
所以呢,整体来讲还是比较容易理解的,下面是一个完整的示例:
var net = new Object();
//构造函数
net.AjaxRequest = function (url, onload, onerror, method, params) {
this.req = null;
this.onload = onload;
this.method = method;
this.onerror = (onerror)? onerror :this.defaultError;
this.loadDate(url ,method, params); //有了这一步所以才能创建实例就进行ajax交互
}
//初始化对象并指定处理函数的方法,prototype添加新的属性
net.AjaxRequest.prototype.loadDate=function (url,method,params) {
if(!method){
method="GET";
}
if(window.XMLHttpRequest){ //非Ie浏览器
this.req = new XMLHttpRequest();
}else if(window.ActiveXObject){
this.req = new ActiveXObject("Microsoft.XMlHTTP");
}
if(this.req){
try{
var loader = this;
this.req.onreadystatechange = function () {//指定回调函数
net.AjaxRequest.onReadyState.call(loader); //call就是说让onReadyState这个函数来执行this对象的函数
}
this.req.open(method, url ,true); //创建连接
if(method == "POST"){ //post\请求设置请求头
this.req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
}
this.req.send(params); //发送信息
}catch (e) {
this.onerror.call(this);
}
}
}
//重构回调函数
net.AjaxRequest.onReadyState = function(){
var req = this.req;
var readyState = req.readyState;
if(readyState == 4){
if(req.status == 200){
this.onload.call(this);
}else{
this.error.call(this);
}
}
}
//重构默认错误处理函数
net.AjaxRequest.prototype.defaultError = function(){
alert("错误数据,回调状态:"+this.req.readyState+",状态:"+this.status);
}
然后我们使用的时候,构建一个 net.AjaxRequest = function (url, onload, onerror, method, params) ,以这个为借口,并且将url,onload等几个参数重构一下就好,能够创建对象就实现ajax交互的原因,是我们在构造函数里面使用了
this.loadDate(url ,method, params); ,这个函数其实就是将我们ajax的所有具体操作整合在了一起,
对回调函数解释一下流程:
首先明白 a.call(b) 函数是让a函数来执行b函数,相当于就是让a函数接收b函数的参数,然后执行b的工作,两个字:重构
net.AjaxRequest.onReadyState.call(loader); 这句话 指定了回调函数为onReadyState,
之后这句代码 this.onload.call(this); 就是让传入的onload函数来重构当前this所指的函数,这里this指的就是回调函数
这块重构过来重构过去就是为了代码更加明了一些吧应该,不过我感觉更加不清晰了,
具体使用时候,
va loader = new net.AjaxRequest(url,回调函数,错误处理函数,请求方法,其他参数..):
之后每隔指定时间,或者根据具体规则来执行该语句就可以啦,
ajax具体实现学习记录的更多相关文章
- vue.js学习记录
vue.js学习记录 文章已同步我的github笔记https://github.com/ymblog/blog,欢迎大家加star~~ vue实例 生命周期 beforeCreate:不能访问thi ...
- 【jQuery】精细学习记录
[jQuery]精细学习记录 基础 基本语法: $(选择器).action(回调函数); $/jQuery //jQuery核心函数 $(选择器) //获得的jQuery对象 jQuery核心 - j ...
- Quartz 学习记录1
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
- Java 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
- Apache Shiro 学习记录4
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
- UWP学习记录12-应用到应用的通信
UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...
- UWP学习记录11-设计和UI
UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...
- UWP学习记录10-设计和UI之控件和模式7
UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...
- UWP学习记录9-设计和UI之控件和模式6
UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...
随机推荐
- 对于BIO/NIO/AIO,你还只停留在烧开水的水平吗?
1.发发牢骚 相信大家在网上看过不少讲解 BIO/NIO/AIO 的文章,文章中举起栗子来更是夯吃夯吃一大堆,我是越看越觉得 What are you 你讲啥嘞? 本文将针对 BIO/NIO/AIO ...
- JVM中的本机内存跟踪
1.概述 有没有想过为什么Java应用程序通过众所周知的-Xms和-Xmx调优标志消耗的内存比指定数量多得多?出于各种原因和可能的优化,JVM可以分配额外的本机内存.这些额外的分配最终会使消耗的内存超 ...
- 分布式事务(1)---2PC和3PC理论
分布式事务(1)---2PC和3PC理论 分布式事物基本理论:基本遵循CPA理论,采用柔性事物特征,软状态或者最终一致性特点保证分布式事物一致性问题. 分布式事物常见解决方案: 2PC两段提交协议 3 ...
- ElasticStack学习(六):ElasticSearch搜索初探
一.ElasticSearch搜索介绍 1.ElasticSearch搜索方式主要分为以下两种: 1).URI Search:此种查询主要是使用Http的Get方法,在URL中使用查询参数进行查询: ...
- 嵊州D2T1 “我只是来打个电话”
嵊州D2T1 “我只是来打个电话” 精神病院有一个这样的测试. 给出一个正整数集合,集合中的数各不相同,然后要求病人回答: 其中有多少个数,恰好等于集合中另外两个(不同的)数之和? 回答正确的人,即可 ...
- Jenkins使用总结,2.0 新时代:从 CI 到 CD
Jenkins近阶段使用的总结篇,只写了个引子,却一直未动手写完,今天补上. 前几篇文章提到在内网jenkins直接构建部署升级线上环境,job都是暴露在外面,很容易被误操作,需要做简单的权限控制,以 ...
- Lucene04-Lucene的基本使用
Lucene04-Lucene的基本使用 导入的包 import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.ap ...
- exe崩溃用windbgattach后有宝贵现场,可看程序退出线程等,千万不要清屏
exe崩溃用windbgattach后有宝贵现场,可看程序退出线程等,千万不要清屏
- c++小游戏——杀手
杀手小游戏 会有一个存活者:(1 2 3 4 5),如果出现(1 0 3 4 5),代表二号已经死了. 一号有3次复活权 且有一次随机诅咒权(即当自己被杀死时,会随机诅咒另外一个人,当然不是死人或自己 ...
- 深入了解数据校验:Bean Validation 2.0(JSR380)
每篇一句 > 吾皇一日不退役,尔等都是臣子 对Spring感兴趣可扫码加入wx群:`Java高工.架构师3群`(文末有二维码) 前言 前几篇文章在讲Spring的数据绑定的时候,多次提到过数据校 ...