学习Ajax的第二天

本文详细介绍了如何对Ajax进行封装,以提高开发效率。通过分析Ajax的get和post请求的异同点,提出了封装的关键在于找到操作的共同点和不同点。文中给出了错误的函数定义示例,并提出了解决全局污染的方法,最终实现了一个正确的Ajax封装函数。此外,还对比了jQuery中的Ajax方法,展示了其更强大的配置选项和便捷的使用方式。
摘要由CSDN通过智能技术生成

对Ajax的封装

前言:之前每次发判断请求时,如果请求方式、参数或者url不一样,那么之前的代码将无法复用,我们得重新写一段代码,所以我们迫切的需要一个通用函数,让用户在使用异步对象的时候通过调用一个相同的函数就可以实现相应的需求

总之:为了提升我们的开发效率,我们自已将XMLHttpRequest封装成一个函数。

思路分析

封装函数的关键在于

  • 找到操作的共同点

  • 找到不同的部分–以后就是参数

简单分析下get方式和post方式两者间的异同点:
在这里插入图片描述
通过对上面图片的分析,我们可以得出:

 1. 请求方式不一样
 2. url路径不一样
 3. 请求的参数不一样
 4. 对响应数据的处理函数不一样
 在上述没写到的,还有数据格式,虽然现在大多数的数据都是json格式的,但还是会存在着xml格式的数据,所以这也是个不同点
 5.数据的格式不一样

ajax的简易封装

下面是对ajax的简易封装(只实现部分参数)

// 封装异步操作,兼容get和post请求方式

// 错误写法1:
// function ajax (type, url, data, success) {
// 这种函数定义的缺点
// 1.这种函数是全局定义,会造成全局污染(存放在内存中不释放,会造成内存溢出),用function定义的函数就是全局函数
// 2.参数顺序固定,用户不方便调用
// 3.参数的数量固定,不方便后期的扩展
// }

// 错误写法2:
// 为了解决上面的问题,我们可以将参数定义为一个对象
// 请求方式:option.type
// 请求url: option.url
// 请求参数:option.data
// 请求成功之后的数据处理函数: option.success
// function ajax (option) {
//   // 但是还是会造成全局污染
// }

// 为了解决全局污染,我们可以将封装函数定义到对象中
// 正确写法
//定义对象,封装ajax方法
const $ = {
    // 定义方法,判断传入的是字符串还是对象
    getParams: function (data) {
        // 判断
        // 如果有传入参数,判断传入的参数的类型
        if (data) {
            // 如果传入的是对象{name:'lala',age:20}  >>需要转为>>  name=lala&age=20
            if (typeof data == 'object') {
                let str = ''
                for (let key in data) {
                    str = str + key + '=' + data[key] + '&'
                }
                // 现在得到的字符串为name=lala&age=20&
                // 最后一个&符号是不需要的,所有需要截掉
                //substr(0, str.length - 1):截取从下标为0开始到倒数第二个字符的字符串
                return str.substr(0, str.length - 1)
            } else {
                // 如果没有传递任何的参数,则直接返回字符串
                return data;
            }
        } else {
            // 否则,直接返回
            return ''
        }
    },

    // 1. ajax方法的参数为一个对象
    // 请求方式:option.type
    // 请求url:option.url
    // 请求参数:option.data
    // 请求数据的格式:option.dataType
    // 请求成功之后的数据处理函数:option.success
    ajax(option) {
        // 1.1 定义请求方式:option.type
        let type = option.type;
        // 1.2 定义请求url:option.url
        let url = option.url;
        // 1.3 定义请求参数:option.data
        // 调用getParams()方法
        let data = this.getParams(option.data);
        // 1.4 定义请求数据格式
        let dataType = option.dataType;
        // 1.4 定义请求成功之后的数据处理函数:option.success
        let success = option.success;

        // 2. 发送请求
        // 2.1 创建异步对象
        let xhr = new XMLHttpRequest();
        // 2.2 请求行
        // 判断请求方式是否为get或者为空(为空就默认是get方式),如果是,则在请求路径url中直接拼接参数;后面发送请求中传入参数为null
        if (type.toLowerCase() == 'get' || '') {
            url = url + '?' + data;
            data = null
        }
        xhr.open(type, url);
        // 2.3 请求头
        // 判断请求方式是否为post,如果是,则添加请求头(get方式无需添加请求头)
        if (type.toLowerCase() == 'post') {
            xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        }
        // 2.4 发送请求
        xhr.send(data);

        // 3. 响应请求  ----  请求体
        xhr.onload = function () {
            // 接收返回值,并转换为js数据类型
            // let res = JSON.parse(xhr.response);
            // 判断请求数据的格式
            let res = null;
            if (dataType.toLowerCase() == 'json') {
                res = JSON.parse(xhr.response);
            } else if (dataType.toLowerCase() == 'xml') {
                res = xhr.responseXML;
            } else {
                res = xhr.response;
            }
            // 调用回调函数
            success && success(res);
        }
    }
}

调用封装好的ajax

 方法:
 	1、引入js文件 
 	2、输入对应的参数即可
get方式

在这里插入图片描述

post方式

在这里插入图片描述


jQuery中的Ajax

基本介绍

jQuery为我们提供了更强大的Ajax封装

$.ajax({}) 可配置方式发起Ajax请求

  • url: 接口地址 *

  • type: 请求方式 *

  • timeout: 请求超时 *

  • dataType: 服务器返回格式 *

  • data: 发送请求数据 *

  • beforeSend:function () {} :请求发起前调用 *

  • success:成功响应后调用 *

  • error :错误响应时调用,即请求失败时调用 *

  • complete: 响应完成时调用(包括成功和失败) *

$.get(url,data,callback,dataType): 以GET方式发起Ajax请求

$.post(url,data,callback,dataType): 以POST方式发起Ajax请求

$(‘form’).serialize():序列化表单(即格式化key=val&key=val)

// 调用serialize方法
/* 
serialize方法的限制: 
   serialize方法可以获取指定表单中,拥有name属性的 表单元素的
    value值,并生成key=value&key=value这种格式。要求表单元素
    的name一定要参照后台接口文件的说明。
    
 (注:如果不是表单,则无法使用这个方法)
*/

一个简单的实例

调用jQuery的Ajax:
在这里插入图片描述

beforeSend:function () {} :请求发起前调用

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值