方法一:(类似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/> 密&nbsp;&nbsp;码:<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代码的更多相关文章

  1. Ajax (Asynchronous javascript xml) 搜索框核心代码(JQuery) Ajax判断用户名存在核心代码 附:原生js的Ajax代码 其中有json的一句话解释

    前端 <script type="text/javascript"> $(function(){ $("#tid").keyup(function( ...

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

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

  3. 使用原生JS封装Ajax

    使用原生 的JS封装 Ajax,实现 仿JQuery的Ajax,post,get三种异步请求方式: var MAjax = { //根据浏览器创建异步对象 createXhr: function () ...

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

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

  5. 原生js封装ajax,深入理解$.ajax()

    直接上代码 //封装的ajax函数 // 传一个对象,所有要用的参数都在对象中 因为不写对象 实参列表个数太多,所以像jq一样,调用ajax也是把对象当实际参数传进去 // type 请求方式 默认g ...

  6. 原生JS封装ajax方法

    http://blog.sucaijiayuan.com/article/89 jquery框架的ajax方法固然好用,但是假如某天我们的项目不能引入jquery或项目需求很简单,没有很多交互功能,只 ...

  7. ajax 原生js封装ajax [转]

    /* 封装ajax函数 * @param {string}opt.type http连接的方式,包括POST和GET两种方式 * @param {string}opt.url 发送请求的url * @ ...

  8. 原生JS封装ajax以及request

    一.封装原生的xhr为ajax类 xhr以及用法见之前的文章 1.根据url确定请求的头部以及别的信息. var _headerConfig = {}; if(url.indexOf('getcapt ...

  9. 原生js封装ajax,实现跨域请求

    描述: 需要ajax跨域请求,用cors跨域方案.服务端设置: header('Access-Control-Allow-Origin: http://front.ls-la.me'); header ...

随机推荐

  1. WPF 新突破

    刘琦告诉我  需要改变哪个属性哪个属性就需要实现InotifyPropertyChanged 董秀伟告诉我  界面改变会立即传输到属性上,并不需要实现InotifyPropertyChanged,只有 ...

  2. CSS3——伸缩布局及应用

    CSS3在布局方面做了非常大的改进,使得我们对块级元素的布局排列变得十分灵活,适应性非常强,其强大的伸缩性,在响应式开中可以发挥极大的作用. 主轴:Flex容器的主轴主要用来配置Flex项目,默认是水 ...

  3. day25-静态、组合、继承

    #!/usr/bin/env python # -*- coding:utf-8 -*- # ----------------------------------------------------- ...

  4. 关于C++ const 的全面总结 分类: ubuntu 2014-12-03 21:03 72人阅读 评论(0) 收藏

    C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助. Const 是C++中常用的类型修饰符,常类型是指使用类 ...

  5. ">/dev/null 2>&1 "是什么意思

    在Linux中: 0:表示键盘输入(stdin) 1:表示标准输出(stdout),系统默认是1 2:表示错误输出(stderr) shell命令:command >/dev/null  2&g ...

  6. HYNB Contest 7:2017 Asia HCMC Vietnam National Programming Contest

    A. Another Query on Array Problem B. Board Covering C. Cumulative Sums 题意 \(A_1=1,A_i=A_{i-1}+sod(A_ ...

  7. POJ 1696 /// 凸包

    题目大意: 不能向左拐 不能重复走 就是求一个螺旋凸包 把已经是凸包内的点标记一下就行 因为凸包的性质 所有点都能走到 注意起点的选择 还有 反复求凸包的过程中边界的改变 #include <c ...

  8. vue项目导出EXCEL功能

    因为一些原因导出EXCEL功能必须前端来做,所以就研究了一下,在网上也找了一些文章来看,有一些不完整,我做完了就记录下来,供大家参考: 1.首先先安装依赖: npm install file-save ...

  9. java笔试之尼科彻斯定理

    验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和. 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 这题也可以用数学公式推理,首项m*(m ...

  10. java笔试之完全数计算

    完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数. 它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身. 例如:28,它有约数1.2.4.7.14. ...