<script>
//封装ajax
// 函数名 ajax
// 函数的参数
// url: 请求的地址
// type: 请求的方式 get /post
// data: 要上传的数据 要求是键值对的形式
// 函数的返回值 没有返回值 // 增加的功能:
// 1. 如果没有传请求的地址,就没有必要执行后面的代码
// 2. 默认是get, 如果传post,则发post请求
// 3. 不需要再上传键值对的字符串了name=zs&age=18&sex=m
// 而是上传一个对象
// {
// name: 'zs',
// age: 18,
// sex: 'm'
// }
// 优化前: 参数列表的问题: 如果记不住顺序,那么传参会错误.少些参数,也会错误
// 优化后: 传入一个对对象. 不需要考虑顺序. 少写type,函数照样可以正常运行
// option要求是一个对象
// option.url
// option.type
// option.data // 最后一个功能: ajax({
url: '../test.php',
type: 'post',
data: {
name: 'zs'
},
success: function(res) {
//当数据成功的响应回来,那么这个函数会自动被调用
// 而且,希望将获取到的数据,传入到这个回调函数中
// alert('响应成功了');
console.log(res);
// JSON.parse(res)
}
});
function ajax(option) {
//判断是否传入对象,
if (option.constructor !== Object) {
console.log('对象');
return;
} //获取参数
var url = option.url;
var type = option.type;
var data = option.data; //功能 1 没有传url return
if (!url) {
return;
}
//功能 2 请求类型
type = type === 'post' ? 'post' : 'get';
//功能 3 将 data 从对象转成 用 & 隔开的键值对的 字符串
var arr = [];
for (var k in data) {
arr.push(k + '=' + data[k]);
}
data = arr.join('&'); //1.创建对象
var xhr = new XMLHttpRequest();
//2.设置请求行
if (type === 'get') {
url += '?' + arr;
data = null;
}
xhr.open(type, url);
//3.设置请求头
if (type === 'post') {
xhr.setRequestHeader(
'content-type',
'application/x-www-form-urlencoded'
);
}
//4.设置请求主体并发送请求
xhr.send(data);
//5.接收响应
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var result = xhr.responseText;
if (xhr.getResponseHeader('content-type').indexOf('json') != -1) {
var obj = JSON.parse(result);
option.success & option.success(obj);
} else if (
xhr.getResponseHeader('content-type').indexOf(xml) != -1
) {
option.success && option.success(xhr.responseXML);
} else {
option.success && option.success(result);
}
} else {
//失败
option.error && option.error();
}
};
}
</script>

04.封装ajax的更多相关文章

  1. 使用原生JS封装Ajax

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

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

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

  3. 原生javascript封装ajax和jsonp

    在我们请求数据时,完成页面跨域,利用原生JS封装的ajax和jsonp: <!DOCTYPE html> <html lang="en"> <head ...

  4. AJAX编程-封装ajax工具函数

    即 Asynchronous [e'sɪŋkrənəs] Javascript And XML,AJAX 不是一门的新的语言,而是对现有技术的综合利用.本质是在HTTP协议的基础上以异步的方式与服务器 ...

  5. javascript 【封装AJAX】

    post function createXHR() { if (typeof XMLHttpRequest != 'undefined') { return new XMLHttpRequest(); ...

  6. 封装ajax原理

    封装ajax原理 首先处理 用户如果不传某些参数,设置默认值 type默认get 默认url为当前页 默认async方式请求 data数据默认为{} 处理用户传进来的参数对象 遍历,拼接成key=va ...

  7. 自定义封装ajax,复制即可用

    支持get.post请求 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  8. 封装ajax,让调用变得简单优化

    思考一下: 通常我们在使用ajax来发送接口请求时,每一次都会调用ajax固定的元素,比如data.url.method.success.error等.那么我们想一下能不能先把ajax封装起来,在每次 ...

  9. 原生JS封装ajax方法

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

随机推荐

  1. python安装过程中的一些问题

    因为看到大神的教程是基于python V2.7,下载该版本且安装成功. 安装目录: https://www.python.org/download/releases/2.7/ 根据系统进行安装包下载 ...

  2. C# 文件下载工具类FileDownHelper

    using System; using System.IO; using System.Threading; using System.Web; namespace 落地页测试代码 { public ...

  3. Flask+SQLAlchemy+alembic+Flask-RESTful使用

    前言 其实准备把这篇删掉,先写Flask-restful相关的,后来想想大体框架还是先写出来,这两天踩了很多坑,有的谷歌也没有答案.一直摸索也总算是开始了. 正文 SQLAlchemy/alembic ...

  4. Python IDLE配置清屏快捷键(Ctrl+L)

    1.在Python\Lib\idlelib下,新建一个ClearWindow.py文件(没有时就新建),内容如下: """ Clear Window Extension ...

  5. MySQL Percona server 5.5 安装审计插件

    近期,公司要求对MySQL 数据库上操作进行审计:通过了解MySQL 官方企业版(付费版)本中集成了audit_log审计插件,但是社区开源版本中并不包含该插件,也没提供下载.进一步了解 MariaD ...

  6. Java_面向对象

    目录 一.封装 二.继承 三.多态 四.重载与重写 五.接口与抽象类 六.继承与组合 七.初始化块 面向对象的三大特征:封装.继承.多态. 一.封装 是指将对象的状态信息都隐藏在对象内部,不允许外部程 ...

  7. 宏定义define和const的区别

    define和const都可以用来定义常量,define的格式为:#define 标识符 字符串,const在定义常量前面,const类型定以后不能被修改,区别主要有如下几点: 1.编译器处理方式不同 ...

  8. bzoj 3261

    题目描述:这里 可持久化字典树裸题,可以作为模板使用 首先介绍一下可持久化字典树 可持久化字典树,顾名思义,就是一种可持久化的数据结构,常用于处理异或问题 我们看一下题目,发现要求一个最大异或和,但是 ...

  9. Interactive map of Linux kernel

    Interactive map of Linux kernel 2.6.36  : http://www.makelinux.net/kernel_map/ 注: 图中函数名带连接

  10. linux常用命令及使用技巧(一)

    shell命令格式:command [options][arguments] shell的通配符 *匹配任意一个或多个字符 ?匹配任意单一字符 []匹配任何包含在方括号内的单字符 shell的重定向: ...