原生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 ...
随机推荐
- Sql Server 表间对应关系
<1>.关联映射:一对多/多对一 存在最普遍的映射关系,简单来讲就如球员与球队的关系:一对多:从球队角度来说一个球队拥有多个球员 即为一对多多对一:从球员角度来说多个球员属于一个球队 即为 ...
- Odoo8中安装新模块找不到的问题
为了要让系统识别出新的模块,我们需要打开用户的技术特性选项,具体在 左侧栏目->用户->administrator, 将技术特性勾选上,刷新. 然后左侧栏目->模块下面就会 ...
- bootstrap重新设计checkbox样式
文章采集于: https://www.cnblogs.com/GumpYan/p/7845445.html#undefined 在原文基础上修改了勾勾的内容,直接采用bootstrap字体库.修改了横 ...
- laravel读excel
fileName = "test.xls";$filePath = "../storage/app/";Excel::load($filePath.$fileN ...
- 破解PHPStrom 10 and Pycharm
注册时选择 License server http://idea.lanyus.com/ 然后点击OK Pycharm -- License server http://idea.lanyus.com ...
- C++重载赋值操作符
1.C++中重载赋值操作函数应该返回什么? 类重载赋值操作符一般都是作为成员函数而存在的,那函数应该返回什么类型呢?参考内置类型的赋值操作,例如 int x,y,z; x=y=z=15; 赋值行为相当 ...
- webpack实践总结
一.Loader写法及执行顺序 从webpack2起,loader的格式如下: module: { rules: [ {test: /\.css$/, use: ['style-loader','cs ...
- [转]struct2 拦截所有没有登录的用户,强行转到登录界面AuthorizationInterceptor
package com.sise.action; import java.util.Map; import com.opensymphony.xwork2.Action; import com ...
- 【个人训练】The Cow Lexicon(POJ-3267)
继续大战dp.2018年11月30日修订,更新一下现在看到这个题目的理解(ps:就现在,poj又503了). 题意分析 这条题目的大意是这样的,问一字符串内最少删去多少的字符使其由给定的若干字符串构成 ...
- c# 3D图形处理库
C#的OpenGL类库SharpGL SharpGL 可以让你在 Windows Forms 或者 WPF 应用中轻松的使用 OpenGL 开发图形应用.更多SharpGL信息 Axiom 3D En ...