原生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 ...
随机推荐
- Leecode刷题之旅-C语言/python-26.移除元素
/* * @lc app=leetcode.cn id=27 lang=c * * [27] 移除元素 * * https://leetcode-cn.com/problems/remove-elem ...
- IO复用——epoll系列系统调用
1.内核事件表 epoll是Linux特有的I/O复用函数.epoll把用户关心的文件描述上的事件放在内核里的一个事件表中,并用一个额外的文件描述符来标识该内核事件表.这个额外文件描述符使用函数epo ...
- Git的升级版本
关于升级版本,例如我们要升级service版本,我们可以这样子操作 1.在master里面pull完了之后,到自己的分支,然后merge master里面的代码,然后把pom文件 里面的版本升一级,然 ...
- 第三十四篇 Python面向对象之 反射(自省)
什么是反射? 反射的概念是由Smith在1982年提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语 ...
- [POJ3585]Accumulation Degree
题面 \(\text{Solution:}\) 有些题目不仅让我们做树型 \(\text{dp}\) ,而且还让我们换每个根分别做一次, 然后这样就愉快的 \(\text{TLE}\) 了,所以我们要 ...
- 1013 Battle Over Cities (25 分)(图的遍历or并查集)
这题用并查集或者dfs都可以做 dfs #include<bits/stdc++.h> using namespace std; ; bool mp[N][N]; int n,m,k; b ...
- Markdown常用的几种语法
在VScode上面写的,现将代码粘贴如下:(在VScode里运行下即可) # Markdown语法 # Ctrl + k v 打开侧边预览 ## 一.加粗斜体删除线 **这是要加粗的文字** *这是要 ...
- Python 3 学习笔记之——面向对象
1. 类的介绍 类(Class) 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例,类是对象的抽象. 方法:类中定义的函数. 类变量:类变量在整个实 ...
- 完整Android开发基础入门博客专栏
博客地址:http://www.runoob.com/w3cnote/android-tutorial-contents.html
- 简单java采集程序一
[目标任务]通过该网站采集全国的手机号码段至数据库表中 [完成过程] 1.初涉正则表达式,学会写简单的正则表达式 2.获取单个网页内容,学会java中基本的IO流 3.将获取数据插入mysql数据库表 ...