ajax deferred 用法
jquery 1.5后增加了deferred 对象,处理延迟。给了我们一些代码组织新的机会。
首先复习一下ajax 原理。
ajax是通过http请求远程加载数据的一种方式。异步加载,不会阻塞文件中后续代码的执行。学习的时候突然想到js引擎是单线程的,不阻塞看起来感觉是并发的样子。于是又搜索了一番,找到了一篇很对症的文章。
js单线程深入分析
看完之后我的理解是,js引擎确实是单线程的,ajax执行时,会发起一个http请求这个请求会给浏览器,浏览器有一个自己的事件队列,浏览器把它放到自己的事件队列中去,等到浏览器空闲了才会执行,当异步事件触发之后(例如xmlhttprequest 完成,回调函数触发),又会进入js执行队列,等待执行。
因为js文件中的代码在本地,远程取得数据又收到很多因素的影响(网速,页面上其他异步事件)所以一般返回回来的时候,本地js文件都执行完了。
好了,回头说说deferred
以前的ajax用法
function getCount(offerIds,callback) {$.ajax({url: url,data: {ids: ids},type: 'get',dataType: 'jsonp',success: function(json) {if (json && json.content) {callback(json.content);} else {return;}},error: function() {return;}})}
这样的写法,不能把数据单独封装成一个方法,也就是说,如果我以后想用这些数据做别的事情,就只能增加callback,或者替换callback。方法不够独立,解耦做的不够好。如果拿得到返回的数据,代码的组织就会更加的灵活。
deferred给了我们这样的机会。
getCount(offeridList.join(',')).done(function(json) {rander(json.content);}).fail(function() {rander();});function getCount(offerIds) {var deferred = $.Deferred();$.ajax({url: url,data: {ids: offerIds},type: 'get',dataType: 'jsonp',success: function(json) {if (json && json.content) {deferred.resolve(json);} else {deferred.reject();}},error: function() {deferred.reject();}});return deferred.promise();}
deferred.promise() 返回一个deferred对象,只开放与改变执行状态无关的方法(比如done()方法和fail()方法),屏蔽了 resolve()和reject() 方法。
使deferred对象在ajax()外部不可以修改状态值。
这样就可以进行链式操作。done()和fail()相当于success,error 方法。deferred的好处是可以执行多个done()。链式调用,按顺序执行。
deferred.resolve()的意思是,将dtd对象的执行状态从”未完成”改为”已完成”,从而立刻触发done()方法。
如果是 .ajax().done().是不用自己手动修改deferred对象状态值的。因为 .ajax().done().是不用自己手动修改deferred对象状态值的。因为.ajax()就会返回一个deferred对象。但是如果把 .ajax()抽出来成为一个方法,就不行了,只能函数内部自己用 .ajax()抽出来成为一个方法,就不行了,只能函数内部自己用 .deferred()自己创建一个deferred对象,手动修改状态值,再return出去,实现链式调用。
ajax deferred 用法相关推荐
- Ajax是什么?Ajax高级用法之Axios技术
Ajax AJAX 异步请求局部刷新 Ajax 参数详解 js.json.jsonp区别 json和jsonp的区别 同源策略 json和js对象的区别 Ajax高级用法(axios) 为什么要用Ax ...
- Ajax updatepanel用法
局部更新是ajax技术的最基本,也是最重要的用法,今天把asp.net ajax中的局部更新控件 updatepanel的用法总结下,大家可以共同探讨 UpdatePanel控制页面的局部更新,这个更 ...
- 深入理解jQuery中$.get、$.post、$.getJSON和$.ajax的用法
当我们用javascript写ajax程序写得很"开心"的时候,突然有人告诉你有一种东西叫jquery,它会告诉你不直接和HttpRequest是多么的快乐,同时你再也不需要再烦恼 ...
- ajax实战用法详解
谦虚使人进步,总结使人提高! 以下5个方法执行一般Ajax请求的简短形式,在处理复杂的Ajax请求时应该使用jQuery.ajax() 1.load(url,[data],[callback]) 载入 ...
- $.get、$.post、$getJSON、$ajax的用法跟区别
$.get $.get()方法使用GET方式来进行异步请求,它的语法结构为: $.get( url [, data] [, callback] ) 解释一下这个函数的各个参数: url:string类 ...
- js原生ajax与jquery的ajax的用法区别
什么是ajax和原理? AJAX 是一种用于创建快速动态网页的技术. 通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据 XMLHttpRequest对象的基本属性: onre ...
- ajax基本用法介绍
一.基于jQuery的ajax 此时需要在模板中引用jQuery,ajax的本质是利用浏览器自带的XMLHttpRequest对象并通过jQuery将数据和请求头进行封装再发送.ajax基本使用方法如 ...
- Ajax的用法之JQuery
示例: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...
- 【原创】Ajax的用法总结
一.什么是Ajax Ajax英文全称为" Asynchr JavsScript and XML"(异步的JavaScript和XML),是一种创建 交互式网页的开发技术. 二.Aj ...
最新文章
- STM32单片机真的落后?
- 评审关上了你CVPR的门?这还有Rebuttal的窗,7个小技巧送上
- hadoop +hbase +zookeeper 完全分布搭建 (版本一)
- 关于网站根目录下面robots.txt文件的作用
- Oracle常见操作汇总(转)
- linux expr格式,计算2-expr命令举例
- 路由器LED闪灯泄露数据
- ajax异步提交 java_jquery ajax异步上传
- 冲击波病毒内幕点滴(2) (转)
- Unity3D项目五:简单打飞碟
- 软件工程专业的论文答辩_软件工程专业本科毕业答辩?
- 关系型数据和文档型数据库有什么区别?
- 【电机原理与拖动基础】Unit 2 直流电机的电力拖动系统
- ior - POSIX文件系统测试工具
- C++实现RS485通信
- 运维工程师分享7道经典面试题,看完轻松拿Offer
- 第一篇博文 开启我的互联网世界【立志学好C语言的兵哥哥】
- C#错误之 System.Threading.ThreadAbortException:正在中止线程
- c语言寻峰算法,寻峰算法总结报告
- python 利用utf-8编码判断中文英文字符
热门文章
- ios逆向学习环境安装(一)
- 从赛马游戏看CyclicBarrier,从斗地主看CountDownLatch
- gff文件_gff/gtf格式
- Veins源码阅读—connectionManager模块
- how velero works
- 实现VS平台账号注册机
- Java SE 008 理解面向对象程序设计 (Inside Object Oriented Programming)
- 先做个“键盘侠”, 再来写程序
- STM32CubeIDE开发(十六),I2C协议采集传感器数据(SHTC1、LTR-553ALS、BMP280、LSM6DSL、MMC3680KJ)
- Bandit:一款Python代码安全漏洞检测工具