有原生写的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的更多相关文章

  1. 原生AJAX(包括Fetch)

    一.INTRO AJAX即“Asynchronous Javascript And XML” 一.Ajax的原生初级 1.1 Ajax对象创建:var xhr= new XMLHttpRequest( ...

  2. 原生ajax、XMLHttpRequest和FetchAPI简单描述

    什么是ajax ajax的出现,刚好解决了传统方法的缺陷.AJAX 是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个 ...

  3. 原生Ajax( XHR 和 Fetch )

    原生Ajax 基本使用的四大步骤,简单易懂 ajax(异步javascript xml) 能够刷新局部网页数据而不是重新加载整个网页.接下来通过本文给大家介绍Ajax的使用四大步骤,非常不错,感兴趣的 ...

  4. 原生Ajax

    使用原生Ajax 验证用户名是否被注册 创建出注册信息: <h1>注册信息</h1><input type="text" name="txt ...

  5. JS原生ajax与Jquery插件ajax深入学习

    序言: 近来随着项目的上线实施,稍微有点空闲,闲暇之时偶然发现之前写的关于javascript原生xmlHttpRequest ajax方法以及后来jquery插件ajax方法,于是就行了一些总结,因 ...

  6. 原生Ajax 和Jq Ajax

    前言:这次介绍的是利用ajax与后台进行数据交换的小例子,所以demo必须通过服务器来打开.服务器环境非常好搭建,从网上下载wamp或xampp,一步步安装就ok,然后再把写好的页面放在服务器中指定的 ...

  7. 手写原生ajax

    关于手写原生ajax重要不重要,各位道友自己揣摩吧, 本着学习才能进步,分享大家共同受益,自己也在自己博客里写一下 function createXMLHTTPRequest() { //1.创建XM ...

  8. 浅谈AJAX的基本原理和原生AJAX的基础用法

    一.什么是AJAX? AJAX,即"Asynchronous Javascript And XML",翻译为异步的JavaScript和XML,是一种创建交互式网页应用的网页开发技 ...

  9. python_way day21 Django文件上传Form方式提交,原生Ajax提交字符处啊,Django文件上传之原生Ajax方式、jQuery Ajax方式、iframe方式,Django验证码,抽屉示例,

    python_way day21 1.Django文件上传至Form方式 2.原生Ajax文件上传提交表单 使用原生Ajax好处:不依赖jquery,在发送一个很小的文件或者字符串的时候就可以用原生A ...

随机推荐

  1. 《University Calculus》-chaper13-多重积分-二重积分的计算

    之前关于二重积分的笔记,介绍了二重积分概念的引入,但是对于它的计算方法(化为累次积分),介绍的较为模糊,它在<概率论基础教程>中一系列的推导中发挥着很重要的作用. 回想先前关于二重积分的几 ...

  2. freepbx 安装和配置

    首先参见   asterisk manager api 的配置,然后根据freepbx的官方文档: http://wiki.freepbx.org/display/HTGS/Installing+Fr ...

  3. top N彻底解秘

    本博文内容: 1.基础Top N算法实战 2.分组Top N算法实战 3.排序算法RangePartitioner内幕解密 1.基础Top N算法实战 Top N是排序,Take是直接拿出几个元素,没 ...

  4. Amoeba实现mysql主从读写分离

    Amoeba实现mysql主从读写分离 这段在网上看了下关于amoeba的文章,总体感觉好像要比mysql-proxy好的多,也参考了不少的资料,此文章可能与其他文章作者会有雷同的地方,请谅解,但是此 ...

  5. CentOS iSCSI客户端使用配置

    配置步骤: 1.查看安装是否安装iSCSI驱动 rpm -qa|grep iscsi 2.查看yum安装源 yum list |grep iscsi 3.安装iscsi驱动 yum install i ...

  6. Linux下使用w命令和uptime命令查看系统负载

    在Linux系统中查询系统CPU和内存的负载(使用率)时,我们通常习惯于使用top.atop或者ps,这篇文章将要给大家介绍如何使用w命令和uptime命令来查看系统的负载情况,对于uptime命令, ...

  7. ios--绘图介绍

    iOS–绘图介绍 绘制图像的三种方式 一. 子类化UIView,在drawRect:方法画图 执行方法时,系统会自行创建画布(CGContext),并且讲画布推到堆栈的栈顶位置 执行完毕后,系统会执行 ...

  8. iOS--日历事件的获取和添加

    日历添加事件 EKEventStore* eventStore = [[EKEventStore alloc] init];//获取日历类 EKEvent *event = [EKEvent even ...

  9. [转] npm命令概述

    PS:问题,nvm找不到正确的下载server NVM_NODEJS_ORG_MIRROR=http://nodejs.org/dist nvm ls-remote NVM_NODEJS_ORG_MI ...

  10. oracle查看死锁和处理方法

    在操作数据库中经常会遇到表死锁问题,特别是不良的数据库设计和操作的时候,更容易遇到死锁问题.今天在系统中往oracle中添加数据时,特意快速多点几次添加的时候,就出现了死锁问题,而且刚好在读取和更新表 ...