原生js封装ajax代码
方法一:(类似jQuery的封装方法)
1、ajax函数封装:
/*
*author: Ivan
*date: 2014.06.01
*参数说明:
*opts: {'可选参数'}
**method: 请求方式:GET/POST,默认值:'GET';
**url: 发送请求的地址, 默认值: 当前页地址;
**data: string,json;
**async: 是否异步:true/false,默认值:true;
**cache: 是否缓存:true/false,默认值:true;
**contentType: HTTP头信息,默认值:'application/x-www-form-urlencoded';
**success: 请求成功后的回调函数;
**error: 请求失败后的回调函数;
*/
function ajax(opts){
//一.设置默认参数
var defaults = {
method: 'GET',
url: '',
data: '',
async: true,
cache: true,
contentType: 'application/x-www-form-urlencoded',
success: function (){},
error: function (){}
}; //二.用户参数覆盖默认参数
for(var key in opts){
defaults[key] = opts[key];
} //三.对数据进行处理
if(typeof defaults.data === 'object'){ //处理 data
var str = '';
var value = '';
for(var key in defaults.data){
value = defaults.data[key];
if( defaults.data[key].indexOf('&') !== - ) value = defaults.data[key].replace(/&/g, escape('&')); //对参数中有&进行兼容处理
if( key.indexOf('&') !== - ) key = key.replace(/&/g, escape('&')); //对参数中有&进行兼容处理
str += key + '=' + value + '&';
}
defaults.data = str.substring(, str.length - );
} defaults.method = defaults.method.toUpperCase(); //处理 method defaults.cache = defaults.cache ? '' : '&' + new Date().getTime() ;//处理 cache if(defaults.method === 'GET' && (defaults.data || defaults.cache)) defaults.url += '?' + defaults.data + defaults.cache; //处理 url //四.开始编写ajax
//1.创建ajax对象
var oXhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
//2.和服务器建立联系,告诉服务器你要取什么文件
oXhr.open(defaults.method, defaults.url, defaults.async);
//3.发送请求
if(defaults.method === 'GET')
oXhr.send(null);
else{
oXhr.setRequestHeader("Content-type", defaults.contentType);
oXhr.send(defaults.data);
}
//4.等待服务器回应
oXhr.onreadystatechange = function (){
if(oXhr.readyState === ){
if(oXhr.status === )
defaults.success.call(oXhr, oXhr.responseText);
else{
defaults.error();
}
}
};
}
2、ajax函数调用:
//调用ajax函数 ajax({ url: '1.php', data: {name: 'ivan', sex: 'male', age: ''}, success: function (data){ alert('返回数据是:' + data); } }); ajax({ url: '1.php', data: 'name=ivan&sex=male&age=23', cache: false, success: function (data){ alert('返回数据是:' + data); } });
转摘于:http://www.cnblogs.com/Ivangel/p/3825701.html?utm_source=tuicool&utm_medium=referral 感谢原作者
方法二:
1、ajax封装
//ajax封装
function Ajax(type, url, data, success, failed){
// 创建ajax对象
var xhr = null;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
} else {
xhr = new ActiveXObject('Microsoft.XMLHTTP')
} var type = type.toUpperCase();
// 用于清除缓存
var random = Math.random(); if(typeof data == 'object'){
var str = '';
for(var key in data){
str += key+'='+data[key]+'&';
}
//method=get&url=
data = str.replace(/&$/, '');
} if(type == 'GET'){
if(data){
xhr.open('GET', url + '?' + data, true);
} else {
xhr.open('GET', url + '?t=' + random, true);
}
xhr.send(); } else if(type == 'POST'){
xhr.open('POST', url, true);
// 如果需要像 html 表单那样 POST 数据,请使用 setRequestHeader() 来添加 http 头。
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(data);
} // 处理返回数据
xhr.onreadystatechange = function(){
if(xhr.readyState == ){
if(xhr.status == ){
success(xhr.responseText);
} else {
if(failed){
failed(xhr.status);
}
}
}
}
}
2、ajax调用
//调用
Ajax('get','check.php',sendData,function(data) {}
3、ajax注册例子如下
//例子 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>ajax注册</title>
</head>
<body>
<form method="post" action="http://www.mytest.com/ajax-09.php" onsubmit="return checkform();"> 用户名:<input type="text" name="username" id="username" onfocus="clearTips()" onblur="checkName();" />
<br/><br/> 密 码:<input type="password" name="userpass1" id="userpass1" onblur="checkPassFirst();" onfocus="clearTips();"/>
<br/><br/> 确认密码:<input type="password" name="userpass2" id="userpass2" onblur="checkPass();" onfocus="clearTips();" />
<br/><br/> 邮箱:<input type="text" name="useremail" id="useremail" onblur="checkEmail();" onfocus="clearTips();" />
<br/><br/> 手机:<input type="text" name="usermobile" id="usermobile" onfocus="clearTips();" onblur="checkMobile();"/><input type="button" value="获取手机验证码" id="mobilebtn" style="display:none;" onclick="getMobileCode();"/>
<br/><br/> 验证码:<input type="text" name="vcode" id="vcode" onblur="checkCode();" onfocus="clearTips();"/>
<img id="code" src="http://www.mytest.com/ajax/code.php" style="width:80;height:24px;border:0;" onclick="changeCode();"/>
<br/><br/> <p style="clear:both;width:500px;color:red;display:none;" id="tips" error=""> </p>
<input type="submit" value="注册" id="submit"/>
</form>
<script>
function checkform() {
var name = document.getElementById('username').value;
if (name.length <= ) {
showTips('用户名不能为空');
return false;
} var pass = document.getElementById('userpass1').value;
if (pass.length <= ) {
showTips('密码不能为空');
return false;
} var pass2 = document.getElementById('userpass2').value;
if (pass2.length <= ) {
showTips('确认密码不能为空');
return false;
} if (pass != pass2) {
showTips('两次密码输入不一致');
return false;
} var email = document.getElementById('useremail').value;
if (email.length <= ) {
showTips('邮箱不能为空');
return false;
}
var emailReg = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
if( !emailReg.test(email) ){
showTips('邮箱输入有误,请重新输入')
return false;
} var mobile = document.getElementById('usermobile').value;
if (mobile.length <= ) {
showTips('手机号不能为空');
return false;
} var regu =/^[][|||][-]{}$/gi;
var re = new RegExp(regu);
if (!re.test(mobile)) {
showTips('手机号输入有误,请重新输入')
return false;
} var code = document.getElementById('vcode').value;
if (code.length <= ) {
showTips('验证码不能为空');
return false;
} return true;
} function clearTips(){
document.getElementById('tips').style.display = "none";
document.getElementById('tips').innerHTML = '';
document.getElementById('submit').disabled = false;
} function showTips(msg){
tipObj = document.getElementById('tips');
tipObj.style.display = "block";
tipObj.innerHTML = msg;
document.getElementById('submit').disabled = true;
} function loading(){
tipObj = document.getElementById('tips');
tipObj.style.display = "block";
tipObj.innerHTML = '加载中...';
} function removeLoading(){
tipObj = document.getElementById('tips');
tipObj.innerHTML = '';
tipObj.style.display = "none";
} function checkName(){
var name = document.getElementById('username').value;
if(isNull(name)) {
showTips('请输入用户名');
}
loading();
var sendData = {username:name,action:'checkname'};
Ajax('get','check.php',sendData,function(data) {
removeLoading();
var user = eval('('+data+')')
if (user.id) {
showTips('用户名已被占用,请重新输入用户名');
}
}, function(data){ showTips('ajax请求错误');
}); } function checkEmail(strEmail) {
var strEmail = document.getElementById('useremail');
var emailReg = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
if( !emailReg.test(strEmail.value) ){
showTips('邮箱输入有误,请重新输入')
return false;
}
} function changeCode(){
var url = document.getElementById('code').src ;
var rand = Math.floor(Math.random() * ( + ));
url += '?' + rand;
document.getElementById('code').src = url;
} function checkMobile(s){
var obj = document.getElementById('usermobile');
var regu =/^[][|||][-]{}$/gi;
var re = new RegExp(regu);
if (!re.test(obj.value)) {
showTips('手机号输入有误,请重新输入') var obj = document.getElementById('mobilebtn');
obj.style.display = 'none';
obj.disabled = true;
return false;
}
var obj = document.getElementById('mobilebtn');
obj.style.display = 'block';
obj.disabled = false;
} function getMobileCode(){
var obj = document.getElementById('usermobile');
var regu =/^[][|||][-]{}$/gi;
var re = new RegExp(regu);
if (!re.test(obj.value)) {
showTips("手机号输入有误,请重新输入")
return false;
}
sendData = {mobile:obj.value, action:"getcode"}
//ajax调用
Ajax("get","check.php",sendData, function(data){
tipObj = document.getElementById('tips');
tipObj.style.display = "block";
tipObj.innerHTML = "手机验证码是:" + data;
}, function(data){
showTips('手机验证码获取错误') ;
});
} function checkPassFirst(){
var pass = document.getElementById('userpass1').value;
if (pass.length <= ) {
showTips('请输入密码');
return false;
} } function checkPass(){
var obj1 = document.getElementById('userpass1');
var obj2 = document.getElementById('userpass2');
if (obj2.value.length <= ) {
showTips('请输入确认密码');
return false;
}
if (obj1.value != obj2.value ) {
showTips('密码与确认密码不对,请重新输入密码');
return false;
}
} function checkCode(){
var obj1 = document.getElementById('vcode');
if (obj1.value.length <= ) {
showTips('请输入验证码');
return false;
}
if (obj1.value.length != ) {
showTips('请输入正确的验证码');
return false;
}
} function isNull( str ){
if ( str == "" ) return true;
var regu = "^[ ]+$";
var re = new RegExp(regu);
return re.test(str);
} function addCookie(objName,objValue,objHours){//添加cookie
var str = objName + "=" + escape(objValue);
if(objHours > ){//为0时不设定过期时间,浏览器关闭时cookie自动消失
var date = new Date();
var ms = objHours**;
date.setTime(date.getTime() + ms);
str += "; expires=" + date.toGMTString();
}
document.cookie = str;
alert("添加cookie成功");
} function getCookie(objName){//获取指定名称的cookie的值
var arrStr = document.cookie.split("; ");
for(var i = ;i < arrStr.length;i ++){
var temp = arrStr[i].split("=");
if(temp[] == objName) return unescape(temp[]);
}
} function delCookie(name){//为了删除指定名称的cookie,可以将其过期时间设定为一个过去的时间
var date = new Date();
date.setTime(date.getTime() - );
document.cookie = name + "=a; expires=" + date.toGMTString();
} //ajax封装
function Ajax(type, url, data, success, failed){
// 创建ajax对象
var xhr = null;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
} else {
xhr = new ActiveXObject('Microsoft.XMLHTTP')
} var type = type.toUpperCase();
// 用于清除缓存
var random = Math.random(); if(typeof data == 'object'){
var str = '';
for(var key in data){
str += key+'='+data[key]+'&';
}
//method=get&url=
data = str.replace(/&$/, '');
} if(type == 'GET'){
if(data){
xhr.open('GET', url + '?' + data, true);
} else {
xhr.open('GET', url + '?t=' + random, true);
}
xhr.send(); } else if(type == 'POST'){
xhr.open('POST', url, true);
// 如果需要像 html 表单那样 POST 数据,请使用 setRequestHeader() 来添加 http 头。
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(data);
} // 处理返回数据
xhr.onreadystatechange = function(){
if(xhr.readyState == ){
if(xhr.status == ){
success(xhr.responseText);
} else {
if(failed){
failed(xhr.status);
}
}
}
}
}
</script>
</body>
</html>
原生js封装ajax代码的更多相关文章
- Ajax (Asynchronous javascript xml) 搜索框核心代码(JQuery) Ajax判断用户名存在核心代码 附:原生js的Ajax代码 其中有json的一句话解释
前端 <script type="text/javascript"> $(function(){ $("#tid").keyup(function( ...
- 原生JS封装Ajax插件(同域&&jsonp跨域)
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...
- 使用原生JS封装Ajax
使用原生 的JS封装 Ajax,实现 仿JQuery的Ajax,post,get三种异步请求方式: var MAjax = { //根据浏览器创建异步对象 createXhr: function () ...
- 原生js封装ajax:传json,str,excel文件上传表单提交
由于项目中需要在提交ajax前设置header信息,jquery的ajax实现不了,我们自己封装几个常用的ajax方法. jQuery的ajax普通封装 var ajaxFn = function(u ...
- 原生js封装ajax,深入理解$.ajax()
直接上代码 //封装的ajax函数 // 传一个对象,所有要用的参数都在对象中 因为不写对象 实参列表个数太多,所以像jq一样,调用ajax也是把对象当实际参数传进去 // type 请求方式 默认g ...
- 原生JS封装ajax方法
http://blog.sucaijiayuan.com/article/89 jquery框架的ajax方法固然好用,但是假如某天我们的项目不能引入jquery或项目需求很简单,没有很多交互功能,只 ...
- ajax 原生js封装ajax [转]
/* 封装ajax函数 * @param {string}opt.type http连接的方式,包括POST和GET两种方式 * @param {string}opt.url 发送请求的url * @ ...
- 原生JS封装ajax以及request
一.封装原生的xhr为ajax类 xhr以及用法见之前的文章 1.根据url确定请求的头部以及别的信息. var _headerConfig = {}; if(url.indexOf('getcapt ...
- 原生js封装ajax,实现跨域请求
描述: 需要ajax跨域请求,用cors跨域方案.服务端设置: header('Access-Control-Allow-Origin: http://front.ls-la.me'); header ...
随机推荐
- jquery实现文字由下到上循环滚动的实例代码
<div id="oDiv"> <ul id="oUl"> <li>第1个li元素</li> <li> ...
- java多线程-AbstractQueuedSynchronizer
大纲: AbstractQueuedSynchronizer简介 aqs基本结构 aqs应用-ReentrantLock.lock aqs应用-ReentrantLock.unlock aqs应用-S ...
- python: 函数递归与尾递归
如果一个函数在内部调用自己,那么这个函数就是递归函数. 例如一个阶乘函数:fact(n)=n! ,其实可以写成 fact(n)=n x fact(n-1). fact(n) 以递归的方式可以表示为: ...
- php开发面试题---php面试题英语(How do you debug a PHP application)
php开发面试题---php面试题英语(How do you debug a PHP application) 一.总结 一句话总结: xdebug or use die() do it; 1.Whi ...
- iOS开发之SceneKit框架--SCNScene.h
1.SCNScene SCNScene是一个场景图——具有附加几何形状.光照.摄像机和其他属性的节点的层次结构,共同形成可显示的3D场景. 2.相关API简介 初始化方法 //懒加载 + (insta ...
- day25-静态、组合、继承
#!/usr/bin/env python # -*- coding:utf-8 -*- # ----------------------------------------------------- ...
- markdown实现页内目录跳转
1.实现页内目录跳转 语法: 页面首部添加目录:[目录](#jump_id) 页面内部锚点:<span id='jump_id'>标题</span>
- 第二周课堂笔记1th
1. 三元运算 + 2. for循环 for为有限循环,while为无限循环 可迭代对象:是字符串,数字不可以 数字不可以迭代但是可以用range函数 for i in range(1 ...
- 解析Asp.net Core中使用Session的方法
2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Core中引 ...
- 使用HttpStaus自定义返回状态
一.导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...