28_跨域

目录

promise

promise的基本语法

async await

try catch

promise 静态方法

跨域

跨域的解决方案

1-cors

​编辑

2-jsonp方案

3-代理服务器


promise

promise 是一个es6新增的语法

承诺的意思 作用:是专门用来解决回调地狱!!!!

promise的基本语法

  // 基本语法:// Promise中 写异步代码// let p1 = new Promise(function(resolve,reject){//resolve("成功")reject("失败")})// 一旦调用了.then 就会触发resolve 方法// 一旦调用了 .catch 就会触发   reject 方法p1.then(res=>{console.log(res);})p1.catch(err=>{console.log(err);})//promise 有三种状态// pending  -- 创建成功  等待中// fulfilled -- 调用了resolve  成功时执行// rejected  -- 调用了 reject  失败时执行
    new Promise(function(resolve,reject){resolve("成功")// reject("失败")}).then(res=>{console.log(res);}).catch(err=>{console.log(err);}).finally(()=>{console.log("成功失败都执行");})

async await

async await 是promise的语法糖

是一个es7的写法

一定要配对使用,,

await 后 是一个promise对象

async 加在await所在的函数!!!

语法

async function fn(){await promise对象1await promise对象2。。。。
}
等着promise对象1执行完  走promise对象2
   // function fn() {//     new Promise((resolve, reject) => {//         setTimeout(() => {//             resolve();//             console.log("2秒后执行1111");//         }, 2000)//     }).then(res => {//         new Promise((resolve, reject) => {//             setTimeout(() => {//                 resolve();//                 console.log("2秒后执行222");//             }, 2000)//         })//     })// }async function fn(){await new Promise((resolve, reject)=>{setTimeout(() => {resolve();console.log("2秒后执行1111");}, 2000)})await new Promise((resolve, reject)=>{setTimeout(() => {resolve();console.log("2秒后执行222");}, 2000)})}fn()

try catch

async await 不能捕获失败, 一旦失败 await后面的代码就不会执行,

可以借助try catch 捕获到错误的状态

     try {// 尝试走这里的代码let obj = null;obj.name = "哈哈";console.log(obj);} catch (error) {// error 就是一个形参  代表是你报错的信息// 如果有错  catch 捕获到错误console.log("写法有误");}
 async function fn() {try {let res = await new Promise((resolve, reject) => {setTimeout(() => {// resolve("成功")reject("失败123")}, 2000)console.log(9999);})// XXXconsole.log(res);} catch (error) {console.log("网络不好,请检查",error);// XXXX}}fn();

promise 静态方法

promise.all()

方法用于将多个promise实例,包装成一个新的promise实例

let p1 = new Promise((r, j) => {setTimeout(() => {r();console.log("p1成功");}, 2000)
})
let p2 = new Promise((r, j) => {setTimeout(() => {r();console.log("p2成功");}, 4000)
})// 等到 p1 和 p2 都执行成功时,就在干什么事儿?
// Promise.all 方法  返回值也是一个promise对象
let p = Promise.all([p1,p2]);
p.then(res=>{console.log("都成功了");
})

promise.race()

只要有一个promise对象 有状态了(不管成功 失败) 就会执行触发race

 let p = Promise.race([p1,p2]);p.then(res=>{console.log(res,"有状态了");})p.catch(err=>{console.log(err,"有错误状态了");})

#axios库ajax封装 后面学框架用的

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://cdn.bootcdn.net/ajax/libs/axios/1.3.5/axios.js"></script>
</head><body><script>// get强求//get无参数axios.get("http://localhost:8888/test/second").then(res => {console.log(res);})// get有参数axios.get("http://localhost:8888/test/third", {params: {name: "jack",age: 18}}).then(res => {console.log(res);})// post   三阶段 axios里 请求拦截器  也可以通过请求拦截器设置请求头axios.defaults.headers["Content-Type"] = "application/x-www-form-urlencoded";axios.post("http://localhost:8888/test/fourth", { name: "jack", age: 18 }).then(res=>{console.log(res);})</script>
</body></html>

跨域

什么是跨域?浏览器发起网络请求的时候会报一个跨域的错。

正常请求

从我的页面去请求weibo显示跨域错误

因为浏览器有同源策略的限制

同源策略:协议,域名,端口号有一个不一样时 浏览器认为是不同的域,请求不到返回的数据(就是不让访问"认为不是一家人")

浏览器的域:http://127.0.0.1:5500/(当前前端页面)

服务器的域:Sina Visitor System

http 默认端口号 80

https默认端口号是 443

  • 注意:同源策略是浏览器的,服务器没有这个东西

  • 当我们想向别人的服务器发起请求时,会被阻止,因为有同源策略的限制

  • 别人的服务器:

    • 当你请求的地址 的 协议、域名、端口号 有一个不同的时候 就算是别人的服务器

    • 这个时候就会触发同源策略的限制

    • 触发了同源策略的限制 就算跨域

默认情况下 如果不处理 都是会跨域的

<body><button>发起请求</button><script>var btn = document.querySelector("button");btn.onclick=async function(){// Access-Control-Allow-Origin: *// http://localhost:5500  浏览器let res = await axios.get("http://localhost:8888/test/second")console.log(res);}// btn.onclick=async function(){//     // access-control-allow-origin: https://s.weibo.com//     let res = await axios.get("https://weibo.com/ajax/side/hotSearch")//     console.log(res);// }</script>
</body>

响应头:access-control-allow-origin:http://s.weibo.com//表示你想访问微博热搜接口,只有这一个域能访问。//weibo.com域肯定是人家内部的服务器,只有weibo内部人员可以调用人家接口。你可以看人家接口的数据但是人家不让你访问。你调人家接口又不给人家钱 人家服务器有压力

这个错误表示自己的域127.0.0.1去访问weibo.com的域被阻止了

人家的这套接口只允许weibo.com的域访问。

那域名能模拟吗?

跨域的解决方案

默认情况下都是跨域的,就算是本地。

1-cors

后端使用的解决方案

cors (Cross - origin resourse sharing) 跨域资源共享 不管你浏览器什么端口允许浏览器跨服务器发起请求 #后端解决跨域#修改后端代码

做法 就是在请求头中  添加
Access-Control-Allow-Origin: * //表示所有域名都可以访问

打开后端代码:找到app.js

前提是先下载好 cors

const cors = require('cors')
app.use(cors())

2-jsonp方案

不是特别常用了,,面试时候会问

为什么jsonp可以借助script 标签 实现跨域? 因为script标签的src属性比较nb的天生是 不受浏览器同源策略的限制

<script src="XXXXXXXXXX"> </script>

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><!-- wd  输入的关键词cb  是callback 回调函数--><script>function fn(res){console.log(res);}</script><!-- https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=36557,38470,38368,38468,38289,38485,37924,26350,22158&wd=1&req=2&bs=%E5%BE%AE%E5%8D%9A&csor=1&cb=jQuery110202603723661767965_1681222830429&_=1681222830432 --><script src="https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=36557,38470,38368,38468,38289,38485,37924,26350,22158&wd=1&req=2&bs=%E5%BE%AE%E5%8D%9A&csor=1&cb=fn&_=1681222830432"></script>
</body>
</html>

百度搜索

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><input type="text"><ul></ul><script>var ipt = document.querySelector("input");ipt.oninput = function () {// console.log(this.value);// 通过script标签引入  接口地址  并且把value值给他传过去let url = `https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=36557,38470,38368,38468,38289,38485,37924,26350,22158&wd=${this.value}&req=2&bs=%E5%BE%AE%E5%8D%9A&csor=1&cb=fn&_=1681222830432`let script = document.createElement("script");script.src = url;document.body.appendChild(script)}let ul = document.querySelector("ul");function fn(res){let str = "";if(ipt.value===''){str="";ul.innerHTML = str;return}res.g.forEach(item => {str+=`<li>${item.q}</li>`});ul.innerHTML = str;}</script><!-- <script src="XXXXXXXX"></script> -->
</body></html>

3-代理服务器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/43387.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode Hot100 刷题笔记(4)—— 二叉树、图论

目录 一、二叉树 1. 二叉树的深度遍历&#xff08;DFS&#xff1a;前序、中序、后序遍历&#xff09; 2. 二叉树的最大深度 3. 翻转二叉树 4. 对称二叉树 5. 二叉树的直径 6. 二叉树的层序遍历 7. 将有序数组转换为二叉搜索树 8. 验证二叉搜索树 9. 二叉搜索树中第 K 小的元素 …

【漏洞复现】Apache Tomcat partial PUT文件上传反序列化漏洞复现(CVE-2025-24813)

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 0x00 免责声明 本文所述漏洞复现方法仅供安全研究及授权测试使用&#xff1b;任何个人/组织须在合法合规…

BurpSuit抓包失败-基础配置

问题描述&#xff1a;当开启拦截抓包的时候&#xff0c;burpsuite没有反应&#xff0c;好不容易经过一通配置&#xff0c;浏览器出现无法访问的情况。 解决办法&#xff1a; 下载浏览器插件 首先下载一个代理转换插件&#xff1a;Omega&#xff0c;这样比较方便&#xff0c;…

求解AX=XB 方法

一、简介 一文浅谈旋转变换&#xff1a;旋转矩阵、旋转向量、欧拉角、四元数-CSDN博客 在机器人学、计算机视觉和几何学中&#xff0c;经常会遇到求解矩阵方程 AXXB 的问题。这种方程通常出现在坐标系变换、手眼标定&#xff08;Hand-Eye Calibration&#xff09;等场景中。理…

AnimateCC基础教学:随机抽取获奖名单及奖品-V1.0原型版

舞台界面设计: 主轴第一帧代码&#xff1a; this.btnObj.addEventListener("click", updateStage.bind(this)); createjs.Ticker.addEventListener("tick", updateRandom.bind(this)) var _this this; var bPlaying false; var nameList ["张三…

深入了解Linux内核:task_struct结构详解

Linux 操作系统的广袤世界里&#xff0c;进程管理宛如一座大厦的基石&#xff0c;支撑着整个系统的稳定运行与高效运转 。而task_struct结构体&#xff0c;无疑是进程管理这座大厦的核心支柱&#xff0c;它承载着进程的关键信息&#xff0c;贯穿于进程从诞生到消亡的整个生命周…

IsaacLab最新2025教程(7)-引入IK solver控制机器人

机器人控制可以直接给定关节角进行驱动实现功能&#xff0c;完成任务&#xff0c;但是关节角不是很直观而且做teleoperation或者是结合VLA模型时候&#xff0c;用eef pose会更符合直觉一些&#xff0c;isaacsim用的是LulaKinematics&#xff0c;因为IsaacLab现在是ETHZ的团队在…

Vue——常用指令总结、指令修饰符、v-model原理、computed计算属性、watch监听器、ref和$refs

文章目录 一、概念理解二、指令1. 常用内置指令总结2. 常用指令修饰符3. 自定义指令4. v-model原理表单类组件封装 三、补充1. computed计算属性2. watch监视器3. ref和$refs 一、概念理解 【事件处理函数】 事件处理函数应该写到一个跟data同级的配置项&#xff08;methods&a…

求职笔试题

PDD 最长公共子序列 1143-最长公共子序列 class Solution:def longestCommonSubsequence(self, text1: str, text2: str) -> int:"""二维动态规划"""m, n len(text1), len(text2)# dp [[0]* (n1)] * (m1) 这种写法错误&#xff0c;m1行…

【Ragflow】6. Ragflow-plus重磅更新:增加用户后台管理系统

概述 Ragflow本身并不包含用户管理的功能&#xff0c;我在系列前文中&#xff0c;写过一个脚本&#xff0c;用来批量插入用户&#xff0c;并自动加入团队&#xff0c;配置默认模型设置。然而&#xff0c;此方式需要用户安装对应环境&#xff0c;对普通用户并不友好。 因此我开…

什么是贴源库

贴源库的定义与核心概念 贴源库&#xff08;Operational Data Store, ODS&#xff09;是数据架构中的基础层&#xff0c;通常作为数据仓库或数据中台的第一层&#xff0c;负责从业务系统直接抽取、存储原始数据&#xff0c;并保持与源系统的高度一致性。其核心在于“贴近源头”…

MSTP+VRRP三层架构综合实验

一、实验目的 掌握VLAN、VRRP、STP和Eth-Trunk的基本配置方法。 实现内网与外网的通信&#xff0c;并确保网络的高可用性和冗余性。 理解DHCP、OSPF和NAT在网络中的应用。 二、实验环境 网络拓扑&#xff1a;如图所示&#xff0c;包含两台三层交换机&#xff08;SW1、SW2&a…

未来村庄智慧灯杆:点亮乡村智慧生活​

在乡村振兴与数字乡村建设的时代进程中&#xff0c;未来村庄智慧灯杆凭借其多功能集成与智能化特性&#xff0c;已成为乡村基础设施建设领域的崭新焦点&#xff0c;为乡村生活带来了前所未有的便利&#xff0c;推动着乡村生活模式的深刻变革。​ 多功能集成&#xff1a;一杆多能…

RedHatLinux(2025.3.22)

1、创建/www目录&#xff0c;在/www目录下新建name和https目录&#xff0c;在name和https目录下分别创建一个index.htm1文件&#xff0c;name下面的index.html 文件中包含当前主机的主机名&#xff0c;https目录下的index.htm1文件中包含当前主机的ip地址。 &#xff08;1&…

第十五章:Python的Pandas库详解及常见用法

在数据分析领域&#xff0c;Python的Pandas库是一个不可或缺的工具。它提供了高效的数据结构和数据分析工具&#xff0c;使得数据处理变得简单而直观。本文将详细介绍Pandas库的基本功能、常见用法&#xff0c;并通过示例代码演示如何使用Pandas进行数据处理。最后&#xff0c;…

算法为舟 思想为楫:AI时代,创作何为?

在科技浪潮汹涌澎湃的当下,AI技术以前所未有的态势席卷各个领域,创作领域亦未能幸免。当生成式AI展现出在剧本撰写、诗歌创作、图像设计等方面的惊人能力时,人类创作者仿佛置身于文明演化的十字路口,迷茫与困惑交织,兴奋与担忧并存。在AI时代,创作究竟该何去何从?这不仅…

[Raspberry Pi]如何將看門狗(WatchDog)服務建置在樹莓派的Ubuntu作業系統中?

看門狗(WatchDog)服務常應用於連網的嵌入式邊緣設備等IOT裝置和實體伺服器&#xff0c;主要是若這些連網裝置分散在各個應用環境中執行對應任務&#xff0c;例如感測物理數據&#xff0c;監控影像數據或執行各式Docker服務&#xff0c;當連網裝置因故異常&#xff0c;同時又處於…

Linux进程状态补充(10)

文章目录 前言一、阻塞二、挂起三、运行R四、休眠D五、四个重要概念总结 前言 上篇内容大家看的云里雾里&#xff0c;这实在是正常不过&#xff0c;因为例如 写实拷贝 等一些概念的深层原理我还没有讲解&#xff0c;大家不用紧张&#xff0c;我们继续往下学习就行&#xff01;&…

RPCGC阅读

24年的MM 创新 现有点云压缩工作主要集中在保真度优化上。 而在实际应用中&#xff0c;压缩的目的是促进机器分析。例如&#xff0c;在自动驾驶中&#xff0c;有损压缩会显着丢失户外场景的详细信息。在三维重建中&#xff0c;压缩过程也会导致场景数据中语义信息(Contour)的…

keil中文注释出现乱码怎么解决

keil中文注释出现乱码怎么解决 在keil–edit–configuration中encoding改为chinese-GB2312