Ajax, jQuery ajax, fetch,axios ヾ(⌐■_■)ノ看完 你就明白了~~

知识点

在这里插入图片描述

Ajax, jQuery ajax, fetch,axios 使用

手写一个简易的 ajax

function ajax(url) {
    const p = new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest()
        xhr.open('GET', url, true)  // true 表示异步
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4) {
                if (xhr.status === 200) {
                    resolve(
                        JSON.parse(xhr.responseText)
                    )
                } else if (xhr.status === 404 || xhr.status === 500) {
                    reject(new Error('404 not found'))
                }
            }
        }
        xhr.send(null)
    })
    return p
}

const url = '/data/test.json'
ajax(url)
.then(res => console.log(res))
.catch(err => console.error(err))

xhr.readyState
  • 0 (未初始化)还没有调用send()方法
  • 1 (载入)已调用send()方法,正在发送请求
  • 2 (载入完成)send()方法执行完成,已经接收到全部响应内容
  • 3 (交互)正在解析响应内容
  • 4 (完成)响应内容解析完成,可以在客户端调用
xhr.status
  • 2xx 表示成功处理请求,如:200
  • 3xx 需要重定向,浏览器直接跳转,如:301(永久重定向) 302(临时重定向) 304(资源未改变)
  • 4xx 客户端请求错误,如:404(请求地址有误,找不到) 403(没有权限访问)
  • 5xx 服务端错误

jQuery 完整 ajax示例

    $(function(){
        //请求参数
        var list = {};
        //
        $.ajax({
            //请求方式
            type : "POST",
            //请求的媒体类型
            contentType: "application/json;charset=UTF-8",
            //请求地址
            url : "http://127.0.0.1/admin/list/",
            //数据,json字符串
            data : JSON.stringify(list),
            //请求成功
            success : function(result) {
                console.log(result);
            },
            //请求失败,包含具体的错误信息
            error : function(e){
                console.log(e.status);
                console.log(e.responseText);
            }
        });
    });

fetch 使用示例

// GET请求
fetch('http://example.com/movies.json')
	.then(function(response) {
		return response.json();
	})
	.then(function(myJson) {
		console.log(myJson);
	});
// POST 请求
fetch('http://www.mozotech.cn/bangbang/index/user/login', {
    method: 'post',
    headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: new URLSearchParams([
        ["username", "Lan"],["password", "123456"]
    ]).toString()
})
.then(res => {
    console.log(res);
    return res.text();
})
.then(data => {
    console.log(data);
})

axios 使用

axios({
    method: 'post',
    url: '/abc/login',
    data: {
        userName: 'Lan',
        password: '123'
    }
})
.then(function (response) {
    console.log(response);
})
.catch(function (error) {
    console.log(error);
});

ajax, jqueryAjax, fetch, axios 对比

在这里插入图片描述

ajax:

优点: 局部更新;原生支持;
缺点: 可能破坏浏览器后退功能;嵌套回调(多个请求之间如果有先后关系的话,就会出现回调地狱。)

jqueryAjax:

在原生的ajax的基础上进行了封装;支持jsonp

fetch:

fetch号称是AJAX的替代品,是在ES6出现的,使用了ES6中的promise对象。Fetch是基于promise设计的。Fetch的代码结构比起ajax简单多了,参数有点像jQuery ajax。

fetch是一种HTTP数据请求的方式,是XMLHttpRequest的一种替代方案。fetch不是ajax的进一步封装,而是原生js。Fetch函数就是原生js,没有使用XMLHttpRequest对象。

优点: 解决回调地狱
缺点: API 偏底层,需要封装;默认不带Cookie,需要手动添加; 浏览器支持情况不是很友好,需要第三方的ployfill

axios:

几乎完美!!
在这里插入图片描述
特点:

  • axios不是原生JS的,需要进行安装
  • 支持浏览器和node.js(从浏览器中创建 XMLHttpRequests
    从 node.js 创建 http 请求)
  • 支持promise
  • 能拦截请求和响应
  • 能转换请求和响应数据
  • 能取消请求
  • 自动转换JSON数据
  • 浏览器端支持防止CSRF(跨站请求伪造)

既然谈到了ajax,就不得不说跨域问题 这个兄嘚勒
在这里插入图片描述

跨域:同源策略(浏览器要保证安全),跨域解决方案

发布了77 篇原创文章 · 获赞 114 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_40693643/article/details/104149931