原生Ajax + Promise
2016-05-06 16:34
357 查看
有原生写的ajax + promise嫁接下
使用
;(function(root){ var LD = function(obj){ if( obj instanceof LD ) return obj; if( !(this instanceof LD )) return new LD(obj); }; root.LD = LD; console.log(window.LD); function __encodeParameter( data ){ let tmp = ""; if(typeof data === 'string') tmp = data; else{ var e = encodeURIComponent; var params = []; for( let k in data ){ if(data.hasOwnProperty( k )){ params.push( e(k)) +'=' + e(data[k]); } } tmp = params.join('&') ; // } return tmp; } function __initialize_xhr(){ let xhr ; if(window.XMLHttpRequest){ xhr = new XMLHttpRequest(); }else if(window.ActiveXObject){ try{ xhr = new ActiveXObject("Msxml2.XMLHTTP"); }catch(ex){ console.log(ex); xhr = new ActiveXObject("Microsoft.XMLHTTP"); } } return xhr; } var ajax = LD.Ajax = function( method , url , data , headers ,cb){ let promise = new Promise(function(resolve , reject ){ let xhr , params; data = data || {}; headers = headers || {}; try{ xhr = __initialize_xhr(); }catch(ex){ console.log(ex); } params = __encodeParameter( data ); console.log("-------"+ params); if(method == 'GET' && params ){ url += '?' + params; params = null; } xhr.open( method , url ); var content_type = 'application/x-www-form-urlencoded'; for(var h in headers ){ if(headers.hasOwnProperty(h)){ if(h.toLowerCase() === "content-type"){ content_type = headers[h]; }else{ xhr.setRequestHeader(h , headers[h]); } } } xhr.setRequestHeader('Content-type', content_type ); xhr.onreadystatechange = function(){ if(xhr.readyState === 4 ){ var err = (!xhr.status || (xhr.status < 200 || xhr.status >= 300) && xhr.status !== 304 ); if( err === false ){ resolve( xhr.responseText , xhr ); }else{ reject( err , xhr ); } //cb(err, xhr.responseText,xhr ); } }; xhr.send(params); }); return promise; }; })(window);
使用
LD.Ajax("GET","/refresh",null,null).then(function(data){ console.log(data); },function( dt) { console.log("err:" + dt ); }).catch(function(){ console.log('catch error'); });
相关文章推荐
- Git-TortoiseGit完整配置流程
- Q~over
- 争吵1
- VMware下Windows2003R2虚拟机磁盘扩容方法 推荐
- Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED解决方法
- 【模板】素数筛选
- Spark 集群与数据集RDD
- <html>form(表单)
- UVa11107 Lifeform
- saltstack 远程执行脚本
- 如何判断链表中是否有环
- 八皇后问题
- CSS默认可继承样式详解
- MUI 和 framework7区别之 UI组件的几点差异
- 前端上传组件Plupload
- iOS 8 之后的动态沙盒路径
- java enum详解
- saltstack 安装 apache
- saltstack 文件目录管理
- saltstack 远程命令