原生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 ...
随机推荐
- Service的两种启动方法
刚才看到一个ppt,介绍service的两种启动方法以及两者之间的区别. startService 和 bindService startService被形容为我行我素,而bindService被形容 ...
- 《A First Course in Probability》-chaper7-期望的性质-相关系数
之前我们介绍过,协方差能够一定程度上描述两个变量之间的相关性,但是有时候它并没有那么准确,例如下面这个例子: 本质一样的两个随机变量,独立性是不变的,但是通过这个等式我看到,如果在随机变量的前面添加了 ...
- HTML5笔记(一)
1.HTML5提供了一些新的元素和属性,例如<nav>(网站导航块)和<footer>.这些标签较有利于搜索引擎的索引整理,同时更好的帮助小屏幕装置和视频人士使用,除此之外,还 ...
- 终端command总结
Ctrl+Alt+Delete Ctrl+Shift+Esc Ctrl+D Alt+F4 Shift+F10 win+m Ctrl+Alt+. Ctrl+A Ctrl+S osk taskmgr cm ...
- python之json学习
1. 从python原始类型向json类型的转换过程,具体的转换如下: import json json.dump(obj, fp, skipkeys=False,ensure_ascii=True, ...
- TPL中的task并不是thread
Tasks are not Threads - The Brain Dump用了一个非常简单直观的例子说明了task和thread并不是一回事(尽管你调用Task.Run一般会在线程池上启一个线程帮你 ...
- Media Queries 自适应布局展示
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- html5之canvas困惑 在canvas标签内需要设置了宽跟高,如果在css中设置同样的宽跟高,画出来的图像变形了?
<canvas class="cvs"></canvas> 遇到的问题: 如css 中设.cvs{width:500px;height:400px;},也就 ...
- 使用FileSystemWatcher监视文件变化
本文转载:http://www.cnblogs.com/zanxiaofeng/archive/2011/01/08/1930583.html FileSystemWatcher基础 属性: Path ...
- PNP8550(3.3V DC蜂鸣器) - 原理图系列
一.截图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2Jpbl9ITEo4MA==/font/5a6L5L2T/fontsize/400/fi ...