前端请求方式(包括ajax、axios、跨域问题)

一、前端向后台发送请求有几种方式
1、 script标签的src属性(JSONP,只能发get请求)
2、 iframe(解决jsonp只发get问题,可以发post)
3、 ajax发送请求(asyn javascript and xml)

下面的不看先

4、 link标签的href属性
5、 img标签的src属性
6、 表单提交发送请求
7、 a标签的href发送请求

二、JSONP
、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准;

2、不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有"src"这个属性的标签都拥有跨域的能力,比如
———————————————— 1 2 3 4 5 6 7 8 9 10 毫无疑问,页面将会弹出一个提示窗体,显示跨域调用成功。

2.2 函数调用
现在我们在jsonp.html页面定义一个函数,然后在远程remote.js中传入数据进行调用。

jsonp.html页面代码如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 remote.js文件代码如下:

localHandler({"result":"我是远程js带来的数据"});
1
运行之后查看结果,页面成功弹出提示窗口,显示本地函数被跨域的远程js调用成功,并且还接收到了远程js带来的数据。很欣喜,跨域远程获取数据的目的基本实现了。

三、AJAX(重点)
实现Ajax的方式:

3.1 XMLHttpRequest (XHR)
XMLHttpRequest对象是ajax的基础,XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。目前所有浏览器都支持XMLHttpRequest。

<body> <button>点击发送请求</button> <div id="result"></div> <script> //获取button元素 const btn = document.getElementsByTagName('button')[0]; const result = document.getElementById('result'); //绑定事件 btn.onclick = function(){ //1. 创建对象 const xhr = new XMLHttpRequest(); //2. 初始化 设置请求方法和url xhr.open('GET', 'http://127.0.0.1:8000/server?a=100&b=200'); //3. 发送 xhr.send(); //4. 事件绑定 处理服务端返回的结果 //readystate 是 xhr 对象中的属性, 表示状态0 1 2 3 4 xhr.onreadystatechange = function() { //判断 if (xhr.readyState === 4) { //判断响应状态码 200 404 403 401 500 //2xx成功 if (xhr.status >= 200 && xhr.status <300) { //处理结果 行 头 空行 体 //响应 // console.log(xhr.status); //状态码 // console.log(xhr.statusText); //状态字符串 // console.log(xhr.getAllResponseHeaders()); //所有响应头 // console.log(xhr.response); //响应体
                    //设置 result 的文本
                    result.innerHTML = xhr.response;
                }
            }
        }
    }
</script>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 3.2 jquery
<div class="container">
    <h2 class="page-header">jQuery发送ajax请求</h2>
    <button class="btn btn-primary">GET</button>
    <button class="btn btn-danger">POST</button>
    <button class="btn btn-info">通用型方法ajax</button>
</div>

<script>

    $('button').eq(0).click(function() {
        //第一个参数是请求url,第二个参数是发送的参数,第三个参数是回调函数,其中的参数是响应体。
        //第四个参数是响应体类型
        $.get('http:127.0.0.1:8000/jquery-server', {a:100,b:200}, function(data){
            console.log(data);
        }, 'json');
    });
    
    $('button').eq(1).click(function() {
        //第一个参数是请求url,第二个参数是发送的参数,第三个参数是回调函数,其中的参数是响应体
        $.post('http:127.0.0.1:8000/jquery-server', {a:100,b:200}, function(data){
            console.log(data);
        });
    });

    $('button').eq(2).click(function() {
        $.ajax({
            //url
            url: 'http:127.0.0.1:8000/jquery-server',
            //参数
            data: {a:100, b:200},
            //请求类型
            type: 'GET',
            //响应体类型
            dataType: 'json',
            //成功的回调
            success: function(data) {
                console.log(data);
            },
            //超时时间
            timeout: 2000,
            //失败的回调
            error: function() {
                console.log("出错啦");
            }
        })
    });
</script> 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 3.3 axios(重点) 看axios之前,先学习一下javaScript异步编程和Promise对象

promise:https://blog.csdn.net/qq_24839991/article/details/79957949

<body> <button>GET</button> <button>POST</button> <button>AJAX</button> <script> const btns = document.querySelectorAll('button'); btns[0].onclick = function() { //配置baseURL axios.defaults.baseURL = 'http:127.0.0.1:8000'; //GET请求 axios.get('/axios-server', { //url参数 params: { id: 100, vip: 7 }, //请求头信息 headers: { name: 'atguigu', age: 20 } }); } </script> </body> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 这里看完再看看下面的同源策略

然后再回来看看axios的官方说明

https://www.kancloud.cn/yunye/axios/234845

四、同源安全策略
同源安全策略 默认阻止“跨域”获取资源。但是 CORS 给了web服务器这样的权限,即服务器可以选择,允许跨域请求访问到它们的资源。

实现跨域方式:

1.jsonp

2.空iframe加form

3.CORS,跨域资源共享(Cross-origin resource sharing)

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

4.代理
————————————————

posted @ 2022-07-01 16:10  月花夕沉  阅读(938)  评论(0)    收藏  举报