原生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 ...
随机推荐
- poj 1329 Circle Through Three Points(求圆心+输出)
题目链接:http://poj.org/problem?id=1329 输出很蛋疼,要考虑系数为0,输出也不同 #include<cstdio> #include<cstring&g ...
- Drawing Lines - SGU 135(简单递推)
求N条直线最多能把一个平面分成几部分. 代码如下: ========================================================================== ...
- HTTP协议的特点
HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式.2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径.请求方法常用的有GET.HEAD.POST.每种方法规定了客户与服务器联系的 ...
- Win7无法设置背景图片的快速解决办法
不知道怎么回事,win7电脑突然连个性化设置背景图片的按钮都没了.真操蛋~~~满屏的黑色背景图案,看着实在是不爽. 为了解决这个问题,网上搜索了好长时间,都不尽然! 最后想到了一个超简单的方法就是: ...
- Cocos2d-x 3.0 红孩儿私家必修 - 第二章 cpp-empty-test
上一章我们讲到说曾经的HelloWorld演示更名为cpp-empty-test. 本章我们来分析一下 执行程序,我们能够看到熟悉的HelloWorld程序:与之前cocos2d-x2.x版本号的He ...
- Linux入门基础 #5:Linux文件系统挂载管理
本文出自 http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...
- 瑕疵(bug)严重性定义
======================== 严重性定义缺陷: o 最先进的–造成执行中断(应用程序崩溃),该功能未预期实现,测试等工作无法进行. o 急-事件是非常重要的,须要立即给予关注. o ...
- javascript 可控速度的上下拉菜单
样式部分 <style type="text/css"> *{ margin:0; padding:0; border:none; background:none;} ...
- jad批量反编译class和jadeclipse集成到eclipse的设置方法
安装jad配置 1.从http://varaneckas.com/jad/下载windows版本的jad.exe 2.安装完毕后配置jad的系统环境变量 批量解压jar和class文件 1.使用7zi ...
- Android 使用Android Studio + Gradle 或 命令行 进行apk签名打包
官方文档:https://developer.Android.com/tools/publishing/app-signing.html 1. 默认为debug mode,使用的签名文件在: $HOM ...