写在前面的话,如果中间有什么不明白的,请先看封装ajax框架!(前言篇)

1、添写一个封闭函数

(function(){})();

在一个项目中,可能会引用多个js框架,如果函数名相同,会有命名冲突,所以这里使用封闭函数。

2、封装一个函数,用于dom元素的获取

但$是局部变量,外面不能直接使用,所以需要添加window.$ = $;

表示为全局对象window添加一个"$"的属性,这个属性的值是当前局部变量$的值。

所以在外部,如果想获取某个dom元素,可以直接:$("content");

3、封装一个函数,用于创建ajax对象

因为之前,我们将一个函数赋值给了$,函数也是对象,所以$也就是一个对象

4、封装ajax的get请求

为对象$添加一个get方法,参数有三个

  url:表示ajax请求的页面地址

  data:表示get请求时所需要传递的参数

  callback:当ajax得到正确的数据后,所执行的回调函数,也就是参数callback接收的参数应该是一个函数。

5、封装ajax的post请求

为对象$添加一个post方法,参数有三个

  url:表示ajax请求的页面地址

  data:表示get请求时所需要传递的参数

  callback:当ajax得到正确的数据后,所执行的回调函数,也就是参数callback接收的参数应该是一个函数。

当调用ajax请求时,可以使用这种形式

$.method(页面地址,传递参数,处理函数);

那么对应的方法中callback参数就指向了这个处理函数,所以callback(xhr.responseText);相当于处理函数(xhr.responseText)

6、添加返回值类型

我们在ajax程序中,可以使用三种数据形式:

a、字符串

b、xml

c、json

需要完善ajax框架 ,可以返回不同类型的数据,再进行不同的处理。首先,为get和post方法添加第四个参数:type,表示期望得到的返回值类型

再根据type值的不同,返回对应的数据

调用形式

$.method(请求地址,参数,处理函数,数据类型);

封装完整的ajax框架代码

 (function(){
//用于得到一个dom对象
var $ = function(id){
return document.getElementById(id);
};
//用于得到一个ajax对象
$.init = function(){
try{return new ActiveXObject();}catch(e){}
try{
return new XMLHttpRequest();
}catch(e){
alert("请更换浏览器!");
}
};
//用于发送ajax的get请求调用方法为$.get("demo.php","username=zhangsan&&age=20",function(result){},'json')
$.get = function(url,data,callback,type){
var xhr = $.init();
//首先判断下传递的data参数是否为null,如果不为空直接拼接到url后传递给服务器
if(data !=null){
url = url+"?"+data;
}
xhr.open("get",url);
//解决缓存问题
xhr.setRequestHeader("If-Modified-since","0");
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
//如果没有传递type参数,让其默认为text
if(type == null){
type ='text';
}
if(type == 'text'){
callback(xhr.responseText);
}
if(type == 'xml'){
callback(xhr.responseXML);
}
if(type == 'json'){
callback(eval("("+xhr.responseText+")"));
}
}
};
xhr.send(null);
};
//用于发送ajax的post请求,调用方法为$.post("demo.php","username=zhangsan&&age=20",function(result){},'json')
$.post = function(url,data,callback,type){
var xhr = $.init();
xhr.open("post",url);
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
//如果没有传递type参数,让其默认为text
if(type == null){
type ='text';
}
if(type == 'text'){
callback(xhr.responseText);
}
if(type == 'xml'){
callback(xhr.responseXML);
}
if(type == 'json'){
callback(eval("("+xhr.responseText+")"));
}
}
};
xhr.send(data);
};
window.$ = $;
})();

封装自己的ajax框架

封装Ajax框架!(代码篇)的更多相关文章

  1. 封装Ajax框架!(前言篇)

    Ajax技术就是利用javascript和xml实现异步交互的功能. 首先先来介绍一下Ajax相关知识点,如果这些你都会的话,请直接跳转到封装ajax框架!(代码篇) 一.Ajax对象的创建 1.创建 ...

  2. 封装自己的Ajax框架

    Ajax技术就是利用javascript和xml实现异步交互的功能. 首先先来介绍一下Ajax相关知识点 一.Ajax对象的创建 1.创建Ajax对象的方式 a.第一种方式是针对IE浏览器 b.第二种 ...

  3. 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)

    1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...

  4. 不借助jquery封装好的ajax,你能用js手写ajax框架吗

    不借助jquery封装好的ajax,你能手写ajax框架吗?最基础的ajax框架,一起来围观吧. .创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); ...

  5. 原生js封装ajax代码

    方法一:(类似jQuery的封装方法) 1.ajax函数封装: /* *author: Ivan *date: 2014.06.01 *参数说明: *opts: {'可选参数'} **method: ...

  6. AJAX(二)AJAX框架

    上文(AJAX(一)AJAX的简介和基础)对ajax异步请求服务器做了详细的介绍和基础应用,可以看出,ajax的一些过程是相对不变的.不必要每次发送请求都写一遍发送代码,一些ajax开发人员已经把他们 ...

  7. Ajax框架,DWR介绍,应用,样例

    使用Ajax框架 1. 简化JavaScript的开发难度 2. 解决浏览器的兼容性问题 3. 简化开发流程 经常使用Ajax框架 Prototype 一个纯粹的JavaScript函数库,对Ajax ...

  8. 优雅的封装ajax,含跨域

    之前写过一篇 先定一个小目标,自己封装个ajax,是基于原生js的,也就是jquery中ajax的简化版本实现的思路.众所周知,jquery的ajax是项目中最常用的请求后台的方式,也算是封装的很完美 ...

  9. Ajax框架,DWR介绍,应用,例子

    使用Ajax框架 1. 简化JavaScript的开发难度 2. 解决浏览器的兼容性问题 3. 简化开发流程 常用Ajax框架 Prototype 一个纯粹的JavaScript函数库,对Ajax提供 ...

随机推荐

  1. Quart2D setNeedsDisplay

    #import "myview.h" @interface myview () @property(nonatomic,assign) float imageY; @end @im ...

  2. CSS设置table下tbody滚动条与thead对齐的方法

    <style>table tbody {display:block;height:195px;overflow-y:scroll;} table thead, tbody tr {disp ...

  3. git使用基本教程

    黑马的视频,以前看过廖雪峰的git,总是学不懂,这次终于看会了,结合视频更佳,红色字是重点. 基于linux下面git百度云视频教程:http://pan.baidu.com/s/1bpk472B 密 ...

  4. MyBatis开发Dao层的两种方式(原始Dao层开发)

    本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方 ...

  5. 十分钟搞定mac下的phpstorm增加xdebug调试

    一.版本信息 mac 10.10.5 php  5.5.38 phpstorm 10.0.3 xdebug   版本需要与php匹配,匹配地址 :点我匹配  点我查看所有版本 提示:不确定xdebug ...

  6. 用MSBuild和Jenkins搭建持续集成环境(1)[收集]

    你或其他人刚刚写完了一段代码,提交到项目的版本仓库里面.但等一下,如果新提交的代码把构建搞坏了怎么办?万一出现编译错误,或者有的测试失败了,或者代码不符合质量标准所要求的底限,你该怎么办? 最不靠谱的 ...

  7. JS之ClassName属性使用

    一.style与className属性的对比 在前面的style属性学习中,知道了通过style属性可以控制元素的样式,从而实现了行为层通过DOM的style属性去干预变现层显示的目地,但是这种就是不 ...

  8. git基础使用——TortoiseGit

    一.初识git Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制 ...

  9. element-ui Message组件源码分析整理笔记(八)

    Message组件源码: main.js import Vue from 'vue'; import Main from './main.vue'; import { PopupManager } f ...

  10. Date类型错误

    今天写代码的时候遇到一个很蛋疼的问题,明明实体类写的是Date型,文本框也是date型,数据库中对应的列是dateTime类型,这原本进行数据录入或者是修改这个操作是不应该出错的,但是一时没找到解决的 ...