用了一段时间的Ajax,感觉有很多的不足之处,于是就封装原生了 XMLHttpRequest 。

  废话不多说,直接上代码。

  

var http = function () {
'use strict'; //strict mode var get = function (options) {
if (!options.url) throw "url is not defined";
options.type = "get";
request(options);
}; var post = function (options) {
if (!options.url) throw "url is not defined";
options.type = "post";
request(options);
}; var fileUpload = function (options) {
if (!options.url) throw "url is not defined"; var _form = new FormData();
_form.append("file", options.file);
if (options.data) {
for (var i in options.data) {
_form.append(i, options.data[i]);
}
}
var _url = options.url;
var _xhr = new XMLHttpRequest();
var _async = true;
if (typeof options.async == "boolean") _async = options.async;
_xhr.open("post", _url, _async);
if (options.header) {
var _header = options.header;
for (var i in _header) {
_xhr.setRequestHeader(i, _header[i]);
}
}
_xhr.onload = function (result) {
if (result && result.target.responseText) {
if (result.target.status == ) {
try {
var _data = JSON.parse(result.target.responseText);
if (typeof options.success == "function") options.success(_data);
} catch (e) {
if (typeof options.success == "function") options.success(result.target.responseText);
}
} else {
alert("Error : " + result.target.status + "(" + result.target.statusText + ")");
if (typeof options.error == "function") options.error(result.target.responseText);
}
}
};
_xhr.send(_form);
_xhr.onloadend = function () {
_xhr = null;
}
}; return {
get: get,
post: post,
fileUpload: fileUpload
} function request(options) {
var _xhr = new XMLHttpRequest();
var _sendstr = formRequestData(options.data);
if (options.setTimeout) {
_xhr.timeout = options.setTimeout;
}
else _xhr.timeout = 18e4; //Default mode for time out is 3 minute. var _async = true;
if (typeof options.async == "boolean") {
_async = options.async;
if (_async == false) _xhr.timeout = ; //Synchronous request for time out must be set 0. Details view https://www.w3.org/TR/XMLHttpRequest/
} if (options.type == "get") {
if (_sendstr) options.url = options.url + "?" + _sendstr;
} _xhr.open(options.type, options.url, _async);
_xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
if (options.header) {
var _header = options.header;
for (var i in _header) {
_xhr.setRequestHeader(i, _header[i]);
}
} if (typeof options.beforeSend == "function") options.beforeSend(_xhr); _xhr.onload = function (result) {
if (result && result.target.responseText) {
if (result.target.status == ) {
try {
var _data = JSON.parse(result.target.responseText);
if (typeof options.success == "function") options.success(_data);
} catch (e) {
if (typeof options.success == "function") options.success(result.target.responseText);
}
} else {
alert("Error : " + result.target.status + "(" + result.target.statusText + ")");
if (typeof options.error == "function") options.error(result.target.responseText);
}
}
}; _xhr.ontimeout = function (e) {
if (typeof options.timeout == "function") options.timeout(e);
_xhr.abort();
alert("Request timeout.");
} _xhr.onabort = function (e) {
if (typeof options.abort == "function") options.abort(e);
} _xhr.send(_sendstr); _xhr.loadend = function () {
_xhr = null; //Close the XMLHttpRequest.
}
} function formRequestData(data) {
var _sendstr = null;
if (data) {
_sendstr = '';
for (var i in data) {
_sendstr += (_sendstr ? '&' : '') + i + '=' + encodeURIComponent(data[i]);
}
}
return _sendstr
}
}();

  代码写的不好......大神勿喷!

基于原生XMLHttpRequest封装的更多相关文章

  1. 基于原生JS封装数组原型上的sort方法

    基于原生JS封装数组原型上的sort方法 最近学习了数组的原型上内置方法的封装,加强了用原生JS封装方法的能力,也进一步理解数组方法封装的过程,实现的功能.虽然没有深入底层,了解源码.以下解法都是基于 ...

  2. 用jQuery基于原生js封装的轮播

    我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...

  3. python+selenium十:基于原生selenium的二次封装

    from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium ...

  4. 原生JS封装Ajax插件(同域&&jsonp跨域)

    抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...

  5. 原生js封装ajax:传json,str,excel文件上传表单提交

    由于项目中需要在提交ajax前设置header信息,jquery的ajax实现不了,我们自己封装几个常用的ajax方法. jQuery的ajax普通封装 var ajaxFn = function(u ...

  6. 原生javascript封装ajax和jsonp

    在我们请求数据时,完成页面跨域,利用原生JS封装的ajax和jsonp: <!DOCTYPE html> <html lang="en"> <head ...

  7. 原生Js封装的弹出框-弹出窗口-页面居中-多状态可选

    原生Js封装的弹出框-弹出窗口-页面居中-多状态可选   实现了一下功能: 1.title可自定义 可拖拽 2.width height可以自定义 3.背景遮罩和透明度可以自定义 4.可以自己编辑弹出 ...

  8. 基于原生js的返回顶部组件,兼容主流浏览器

    基于原生js的返回顶部插件,兼容IE8及以上.FF.chrome等主流浏览器. js文件中封装了getScrollTop()和changeScrollTop()函数分别用于获取滚动条滚动的高度和修改滚 ...

  9. python selenium基于显示等待封装的一些常用方法

    import os import time from PIL import Image from selenium import webdriver from appium import webdri ...

随机推荐

  1. 总结linux内核的一些参数优化

    sysctl命令被用于在动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中. 它包含一些TCP/IP堆栈和虚拟内存系统的高级选项, 用sysctl可以读取设置超过五百个系统变量. sy ...

  2. 为什么 Android 开发者都应该尝试一下 Anko?

    简评: 这里介绍的仅仅是 Anko 中很小的一部分,Kotlin + Anko 真的让 Android 开发简化了不少,用了 Anko 基本就可以告别那些什么 Android 不得不知的代码收集贴了. ...

  3. 最简洁地说明常用的git指令(1)

    前提条件,在github上面创建一个仓库,注册好git账号,下面开始 首先在项目文件夹下面,如果有安装git则邮件gitbash进入控制台.另一种方式是使用IDEA打开你要上传的工程,在里面的命令行下 ...

  4. Codeforces 987 K预处理BFS 3n,7n+1随机结论题/不动点逆序对 X&Y=0连边DFS求连通块数目

    A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...

  5. SpringMVC初识

    1 SpringMVC的概述 Spring为展现层提供的基于MVC设计理念的优秀的web框架,是目前最主流的MVC框架之一. Spring3.0后面全面超过Struts2,成为了最优秀的MVC框架. ...

  6. NETCONF

    NETCONF协议(Network Configration Protocol) NETCONF是一个基于XML的交换机配置接口,用于替代CLI.SNMP等配置交换机. 本质上来说,NETCONF就是 ...

  7. Ubuntu启动器创建

    Ubuntu 启动器创建 启动器的本质是一个后缀为.desktop的文件,文件内容如下(这里为我创建的Chrome启动器) [Desktop Entry] Encoding=UTF- Name=Chr ...

  8. 安装twisted遇到的坑

     在使用twisted框架的时候,我们需要知道他是干什么的? twisted支持很多种协议,包括传输层的TCP, UDP, TLS和引用层的HTTP和FTP等. twisted框架其主要发行版本是以p ...

  9. CodeForces-916B-Jamie and Binary Sequence(changed after round)(构造)

    链接: https://vjudge.net/problem/CodeForces-916B 题意: Jamie is preparing a Codeforces round. He has got ...

  10. apk反编译(仅供娱乐)

    第一个文件夹里面放apk,第二个解析classes.dex,第三个查看java代码,下面三个apktool用来解析apk文件, 记得在环境变量中配置apktool,路径为apktool所在路径 1.解 ...