<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. HtmlWebpackPlugin用的html的ejs模板文件中如何使用条件判断

    折腾: [已解决]给react-hot-boilerplate中的index.html换成用HtmlWebpackPlugin自动生成html 期间,已经有了思路了,但是不知道如何在ejs的html中 ...

  2. cURL error 60: SSL certificate problem: unable to get local issuer

    github 问题连接 https://github.com/yabacon/paystack-php/wiki/cURL-error-60:-SSL-certificate-problem:-una ...

  3. 收藏vue技术内幕

    http://hcysun.me/vue-design/art/7vue-reactive.html#observer-%E6%9E%84%E9%80%A0%E5%87%BD%E6%95%B0

  4. 配置SSL证书

    在阿里云买了SSL证书,但是访问的时候提示如下图: 这个就郁闷了,按照这个方式导入了证书,但还是不行,后来得到同事的帮助,使用这个工具 然后重启下服务器就可以了.

  5. jQuery基础操作

    1.jQuery的介绍 jQuery是一个轻量级的.兼容多浏览器的JavaScript库.jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地进行Ajax交 ...

  6. 【mongo】查询超时处理

    使用no_cursor_timeout collection = self.db[tb_name] cols = collection.find(no_cursor_timeout=True) for ...

  7. Bootstrap-datepicker3官方文档中文翻译---Keyboard support/键盘支持(原文链接 http://bootstrap-datepicker.readthedocs.io/en/latest/index.html)

    本日期控件包含了键盘导航.  “focused date” 在键盘导航期间一直会被保持追踪并且高亮显示(就想鼠标悬停的时候一样),当一个日期被切换(译者注:选中状态的切换)时或者控件隐藏时清除. up ...

  8. bzoj 3261

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

  9. jdk7_ConcurrentHashMap 图示

    jdk7_ConcurrentHashMap初始化图示 jdk7_ConcurrentHashMap_put和get操作_扩容_线程安全的分析

  10. ***阿里云ECS实战配置虚拟主机 + Apache 配置虚拟主机三种方式

    阿里云ECS实战配置虚拟主机 买了一台ECS阿里云服务器,性能感觉有点富余,想着可以陪着虚拟主机多一些WWW目录好放一些其他的程序.比如DEMO什么的. 今天研究了下,主要是就是做基于不同域名的虚拟主 ...