原生Ajax + Promise
有原生写的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');
});
原生Ajax + Promise的更多相关文章
- 原生AJAX(包括Fetch)
一.INTRO AJAX即“Asynchronous Javascript And XML” 一.Ajax的原生初级 1.1 Ajax对象创建:var xhr= new XMLHttpRequest( ...
- 原生ajax、XMLHttpRequest和FetchAPI简单描述
什么是ajax ajax的出现,刚好解决了传统方法的缺陷.AJAX 是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个 ...
- 原生Ajax( XHR 和 Fetch )
原生Ajax 基本使用的四大步骤,简单易懂 ajax(异步javascript xml) 能够刷新局部网页数据而不是重新加载整个网页.接下来通过本文给大家介绍Ajax的使用四大步骤,非常不错,感兴趣的 ...
- 原生Ajax
使用原生Ajax 验证用户名是否被注册 创建出注册信息: <h1>注册信息</h1><input type="text" name="txt ...
- JS原生ajax与Jquery插件ajax深入学习
序言: 近来随着项目的上线实施,稍微有点空闲,闲暇之时偶然发现之前写的关于javascript原生xmlHttpRequest ajax方法以及后来jquery插件ajax方法,于是就行了一些总结,因 ...
- 原生Ajax 和Jq Ajax
前言:这次介绍的是利用ajax与后台进行数据交换的小例子,所以demo必须通过服务器来打开.服务器环境非常好搭建,从网上下载wamp或xampp,一步步安装就ok,然后再把写好的页面放在服务器中指定的 ...
- 手写原生ajax
关于手写原生ajax重要不重要,各位道友自己揣摩吧, 本着学习才能进步,分享大家共同受益,自己也在自己博客里写一下 function createXMLHTTPRequest() { //1.创建XM ...
- 浅谈AJAX的基本原理和原生AJAX的基础用法
一.什么是AJAX? AJAX,即"Asynchronous Javascript And XML",翻译为异步的JavaScript和XML,是一种创建交互式网页应用的网页开发技 ...
- python_way day21 Django文件上传Form方式提交,原生Ajax提交字符处啊,Django文件上传之原生Ajax方式、jQuery Ajax方式、iframe方式,Django验证码,抽屉示例,
python_way day21 1.Django文件上传至Form方式 2.原生Ajax文件上传提交表单 使用原生Ajax好处:不依赖jquery,在发送一个很小的文件或者字符串的时候就可以用原生A ...
随机推荐
- mac上的键盘生活——输入法键位设置小技巧以及去掉自带输入法
今天上QQ跟阳小进讨论的时候突然聊到了输入法,然后阳小进就发了这样一段文字过来: 修改中西文切换键由Shift到Ctrl 关于为什么要改为Ctrl键,贴吧里有个讨论 在贴吧说服佛振的网友: 「因为 S ...
- Codeforces Round #208 (Div. 2) 358D Dima and Hares
题目链接:http://codeforces.com/problemset/problem/358/D 开始题意理解错,整个就跪了= = 题目大意:从1到n的位置取数,取数的得到值与周围的数有没有取过 ...
- lib_mysqludf_sys的安装过程
看了太多资料,累坏了,先杂乱的放在这里吧,回头有时间再排版 一.window系统 1.从sqlmap中找到32为的 lib_mysqludf_sys.dll (64位的我没有测试成功) 选择数据库 U ...
- matches()方法
java.lang包中的String类和java.util.regex包中的Pattern,Matcher类中都有matches()方法,都与正则表达式有关.下面我分别举例:(字符串:"ab ...
- LogMiner详细讲解
原文地址:LogMiner 一.LogMiner的用途 日志文件中存放着所有进行数据库恢复的数据,记录了针对数据库结构的每一个变化,也就是对数据库操作的所有DML语句. 在Oracle 8i之前,Or ...
- input标签上传图片怎么获取src;
大家都知道input标签可以上传文件 如: <input type="file"/> 就可以上传文件,当然也可以上传图片,上传的图片的src地址如何取到: var re ...
- 【android】ImageView的src和background的区别以及两者的妙用
一.ImageView中XML属性src和background的区别: background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸 .src是图片内 ...
- poj 2240 Arbitrage (Floyd)
链接:poj 2240 题意:首先给出N中货币,然后给出了这N种货币之间的兑换的兑换率. 如 USDollar 0.5 BritishPound 表示 :1 USDollar兑换成0.5 Britis ...
- CodeIgniter框架url去index.php(转)
针对apache,支持mode_rewrite可以通过在目录先建立.htaccess去掉url中index.php .htaccess内容如下: RewriteEngine on RewriteCon ...
- 四种数据持久化方式(下) :SQLite3 和 Core Data
在上文,我们介绍了iOS开发中的其中2种数据持久化方式:属性列表.归档解档. 本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运用: 在本节,将通过对4个文 ...