章节
问答
课签
笔记
评论
占位
占位

设计ajax库需要考虑的问题

Ajax 的底层实现都是浏览器提供的,所以任何基于 api 上面的框架或者库,都只是说对于功能的灵活与兼容维护性做出最优的扩展。
Ajax 请求的流程:

1、通过 new XMLHttpRequest 或其它的形式(指IE)生成 ajax 的对象 xhr。  
2、通过 xhr.open(type, url, async, username, password) 的形式建立一个连接。
3、通过 etRequestHeader 设定 xhr 的请求头部(request header)。  
4、通过 send(data) 请求服务器端的数据。
5、执行在 xhr 上注册的 onreadystatechange 回调处理返回数据。

这几步之中,我们开发者可能会遇到的问题

1、跨域
2、json的格式
3、dataType
4、AJAX乱码问题
5、页面缓存
6、状态的跟踪
7、不同平台兼容

jQuery 主要就是解决上面这问题,之后就在这个基础之上进行扩展,jQuery2.0.3 版的 Ajax 部分源码大概有 1200 多行,主要针对 ajax 的操作进行了一些扩展,使之更加灵活,jQuery 在 1.5 中对 Ajax 模块的重写,增加了几个新的概念,Ajax 模块提供了三个新的方法用于管理、扩展 Ajax 请求,分别是:

前置过滤器 jQuery. ajaxPrefilter
请求分发器 jQuery. ajaxTransport
类型转换器 ajaxConvert

除此之后还重写了整个异步队列处理,加入了 deferred,可以将任务完成的处理方式与任务本身解耦合,使用 deferreds 对象,多个回调函数可以被绑定在任务完成时执行,甚至可以在任务完成后绑定这些回调函数。这些任务可以是异步的,也可以是同步的。

比如之前提到的:

  1. 链式反馈 done 与 fail
  2. 分离异步与同步处理,不再被限制到只有一个成功,失败或者完成的回调函数了。相反这些随时被添加的回调函数被放置在一个先进先出的队列中。
  3. 同时执行多个 Ajax 请求,这个比较复杂一点,原理其实就是 $.get 返回的是一个 deferred 对象,每个 jQuery 的 Ajax 方法返回值都包含一个 Promise 函数,用来跟踪异步请求。Promise 函数的返回值是 deferred 对象的一个只读视图 Deferreds 通过检测对象中是否存在 promise() 函数来判断当前对象是否可观察。$.when() 会等待所有的 Ajax 请求结束,然后调用通过 .then(), .fail()注册的回调函数(具体调用哪些回调函数取决于任务的结束状态)。这些回调函数会按照他们的注册顺序执行。显而易见,deferred 对象就是 jQuery 的回调函数解决方案,它解决了如何处理耗时操作的问题,对那些操作提供了更好的控制,以及统一的编程接口。

任务

?不会了怎么办
||

提问题

写笔记

截图
提交
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

举报

0/150
提交
取消
全部 精华 我要发布
全部 我要发布
最新 点赞
只看我的

手记推荐

更多

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?