原生ajax方法封装
/**
* @function ajax request
* @fields ajaxName:请求名称,method:请求方法,headers:setRequestHeader自定义部分,url:接口地址,async:是否异步请求,withCredentials:是否支持跨域发送cookie,dataType:数据类型 ,data:post请求参数
* @param data:{ajaxName:"ajaxNameString",headers:{},method:"GET/POST",url:"",async:true/false,withCredentials:true/false,dataType:"json",data:""}
* @result ajaxName.responseText
*/
function ajaxRequest (data, callback) {
data = data || {}
data.dataType = data.dataType || 'json'
var sendParams = null
var headers = data.headers || {}
var ajax = data.ajaxName
// 新建请求
if (window.XMLHttpRequest) {
ajax = new XMLHttpRequest()
} else {
ajax = new ActiveXObject('Microsoft.XMLHTTP')
}
// 打开请求
ajax.open(data.method.toUpperCase(), data.url, data.async)
// 是否支持跨域发送cookie
ajax.withCredentials = data.withCredentials
ajax.setRequestHeader("Content-type", data.contentType || "application/x-www-form-urlencoded")
// POST请求设置
if (data.method == 'POST') {
for (var i in headers) {
ajax.setRequestHeader(i, headers[i])
}
if (data.data) {
sendParams = data.data
}
}
// 发送请求
ajax.send(sendParams ? sendParams : null)
// 注册事件
ajax.onreadystatechange = function () {
if (window.location.origin + '/login/index' === ajax.responseURL) {
window.location.reload()
window.location.href = window.location.origin + '/login/index'
return
}
callback(ajax)
}
} /**
* GET
* @param ajaxName 请求名称
* @param requestUrl 请求接口地址
* @param async 是否异步请求
* @param callBack 回调函数
* @param contentType 请求类型
*/
function ajaxGetData (ajaxName, requestUrl, async, callBack, contentType) {
ajaxRequest({
ajaxName: ajaxName,
contentType: contentType || "application/json;charset=utf-8",
method: "GET",
url: requestUrl,
async: async,
cache: false,
withCredentials: true,
dataType: "json"
}, function callback (ajax) {
if (ajax.status == 200 && ajax.readyState == 4) {
callBack(ajax.responseText)
}
})
} /**
* 拼接GET请求url参数
* @param url
* @param params
* @returns {string}
*/
function formateGetUrl (url, params) {
var resultParams = ''
for (var key in params) {
resultParams = resultParams + '&' + key + '=' + params[key]
}
return url + '?' + resultParams.substr(1)
} /**
* POST
* @param ajaxName 请求名称
* @param requestUrl 请求接口地址
* @param async 是否异步请求
* @param callBack 回调函数
* @param contentType 请求类型
*/
function ajaxPostData (ajaxName, requestUrl, params, async, callBack, contentType) {
var resultParams = ''
if (!contentType || contentType === "application/x-www-form-urlencoded;charset=utf-8") {
for (var key in params) {
resultParams = resultParams + '&' + key + '=' + encodeURIComponent(params[key])
}
} else {
resultParams = params && JSON.stringify(params)
}
ajaxRequest({
ajaxName: ajaxName,
headers: {},
contentType: contentType || "application/x-www-form-urlencoded;charset=utf-8",
method: "POST",
dataType: "json",
url: requestUrl,
processData: true,
async: async,
data: resultParams
}, function callback (ajax) {
if (ajax.status == 200 && ajax.readyState == 4) {
callBack(ajax.responseText)
}
})
}
原生ajax方法封装的更多相关文章
- 原生ajax与封装的ajax使用方法
当我们不会写后端接口来测试ajax时,我们可以使用node环境创建一个本地服务器. 1.创建一个本地服务器可参考http://www.cnblogs.com/heyujun-/p/6793900.ht ...
- 【前端学习笔记04】JavaScript数据通信Ajax方法封装
//Ajax 方法封装 //设置数据格式 function setData(data){ if(!data){ return ''; } else{ var arr = []; for(k in da ...
- js原生Ajax的封装与使用
一.原生Ajax代码的封装如下: (function() { var XHR = { createStandardXHR: function() { return new XMLHttpRequest ...
- js原生Ajax 的封装和原理
原理及概念 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种用于创建快速动态网页的技术. 动态网页:是指可以通过服务器语言结合数 ...
- Ajax方法封装
打算自己封装一个ajax方法,再不用jq库的情况下,直接引用: ajax作用:数据交互,在不刷新页面的情况下,发送请求,获取数据: 首页第一步常见一个ajax对象:XMLHttpRequest,之后会 ...
- 原生ajax函数封装
原生ajax函数 function ajax(json){ json=json || {}; if(!json.url){ return; } json.data=json.data || {}; j ...
- js实现原生Ajax的封装及ajax原理详解
原理及概念 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种用于创建快速动态网页的技术. 动态网页:是指可以通过服务器语言结合数 ...
- 基于jquery的ajax方法封装
在实际的项目里,ajax的应用频率很高,所以尽管jquery或者其他的一些类似的js库做了非常不错的封装,仍然有进一步封装简化的空间和必要 举一个例子,很久很久以前,我的ajax是这么写的: $.aj ...
- 原生ajax解析&封装原生ajax函数
前沿:对于此篇随笔,完是简要写了几个重要的地方,具体实现细节完在提供的源码做了笔记 <一>ajax基本要点介绍--更好的介绍ajax 1. ajax对象中new XMLHttpReques ...
随机推荐
- Linux 系统无法登录?你的程序有问题吧!
今天遇到一个问题,有个用户连接不上服务器(无法ssh远程连接) su: failed to execute /bin/bash: Resource temporarily unavailable 谷歌 ...
- ecshop漏洞修复 以及如何加固ecshop网站安全?
由于8月份的ECSHOP通杀漏洞被国内安全厂商爆出后,众多使用ecshop程序源码的用户大面积的受到了网站被篡改,最明显的就是外贸站点被跳转到一些仿冒的网站上去,导致在谷歌的用户订单量迅速下降,从百度 ...
- Redis缓存数据库的安装与配置(1)
1.安装 tarxf redis-3.2.5.tar.gz cd redis-3.2.5 make mkdir -p /usr/local/redis/bin src目录下这些文件作用如下 redis ...
- Leecode刷题之旅-C语言/python-101对称二叉树
/* * @lc app=leetcode.cn id=101 lang=c * * [101] 对称二叉树 * * https://leetcode-cn.com/problems/symmetri ...
- C语言:类型、运算符、表达式
看了一天书,有点累了.就写写随笔记录一下今天的复习成果吧. C语言的基本数据类型 数值型:整型数,浮点数,布尔数,复数和虚数. 非数值型:字符. 整数最基本的是int,由此引出许多变式诸如有符号整数s ...
- Mongoose模式的扩展
模式的扩展 默认值 默认值的类型: 固定值.即使生成 代码展示: var mongoose = require('mongoose');mongoose.connect('mongodb://loca ...
- 最短路径算法 2.Dijkstra算法
Dijkstra 算法解决的是带权重的有向图上单源最短路径问题,该算法要求所有边的权重都为非负值.该算法的时间复杂度是O(N2),相比于处理无负权的图时,比Bellmad-Ford算法效率更高. 算法 ...
- 【Leetcode】709. To Lower Case
To Lower Case Description Implement function ToLowerCase() that has a string parameter str, and retu ...
- session、token、cookie的区别
token就是令牌,比如你授权(登录)一个程序时,他就是个依据,判断你是否已经授权该软件cookie就是写在客户端的一个txt文件,里面包括你登录信息之类的,这样你下次在登录某个网站,就会自动调用co ...
- Python全栈 MongoDB 数据库(概念、安装、创建数据)
什么是关系型数据库? 是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据, 同时也是一个被组织成一组拥有正式描述性的表格( ...