论坛首页 Web前端技术论坛

基本的封装---Ajax之一

浏览 19718 次
该帖已经被评为精华帖
作者 正文
   发表时间:2010-08-19   最后修改:2010-08-19
xhr.onreadystatechange = function(){
	if(xhr.readyState == 4){  
		if(xhr.status == 200){//当然你可以把200~300之间或304的都理解成响应成功
			//callback
		}
	}
}


我以前老纠结在这里.

如果访问完成,并且成功返回结果,xhr.readyState 会变成4.

但如果服务器没有响应,xhr.readyState 依然会变成4.
0 请登录后投票
   发表时间:2010-08-19  
hyj1254 写道
var Ajax ={request:function(){}};

见过的多数代码都是这样写的。在这里用闭包感觉没什么意义。


同感,不太喜欢闭包
0 请登录后投票
   发表时间:2010-08-19  
如果进行像你这样进行封装的话,还需要用jquery吗?你个人觉得那个会更快呢?
0 请登录后投票
   发表时间:2010-08-19  
不错,新人就需要这种文章
期待websocket早日取代ajax
0 请登录后投票
   发表时间:2010-08-21  
像jquery封装的ajax。不错,学习
0 请登录后投票
   发表时间:2010-08-23  
clue 写道
LZ发的帖都很实在...

不过上面的代码有个问题,我以前也常犯,调试过几次就印象深刻了:
// ...
		function fn(){}
		var async   = opt.async 	|| true, // 这句话有问题
			method  = opt.method 	|| 'GET',
//...


你的代码在这里会使async永远为true

可以有以下几种改法,都是比较常用的:
// 1. 默认为true,只有传入false才真正为false
async = opt.async !== false;
// 2. 判断是否有传值,然后转为boolean型
async = typeof opt.async !== "undefined" ? !!opt.async : true;
// 3. 使用hasOwnProperty判断
async = opt.hasOwnProperty("async") ? !!opt.async : true;


第1种很精简,Ext源码中有不少。
第2种很直观(Ext中常用Ext.isDefined判断)
第3种最深入,还能无视原型的干扰,只处理直属属性。

一般第1种就够用了。


小弟不才 请问 async = opt.async !== false; 这句话应该怎么看?
  实在是看不懂 !== 是啥意思
求教 !
谢谢
0 请登录后投票
   发表时间:2010-09-02  
来看看那 刚开始看ajax
0 请登录后投票
   发表时间:2010-09-14  
jquery上封装一下。跟公司封装的差不多.
0 请登录后投票
   发表时间:2010-09-15  
重新做轮子。。
0 请登录后投票
   发表时间:2010-09-16  
fangbz 写道

小弟不才 请问 async = opt.async !== false; 这句话应该怎么看?
  实在是看不懂 !== 是啥意思
求教 !
谢谢

==和!=是比较运算符,但当类型不同时会进行类型转换
例如false==0这个条件为真

而===和!==不会进行类型转换,类型不同就判断它们不同
所以false===0为假

一般为了安全起见,都是使用===进行比较的(使用JSLint检查时,也会提醒你不要使用==)
(才看到回帖,Orz...)
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics