JS异步-跨域

本文涉及的产品
.cn 域名,1个 12个月
简介: JS异步-跨域

本文将会简绍以下内容


  • 异步与同步
  • 回调函数
  • Promise
  • 跨域
  • 同源策略
  • CORS
  • JSONP


异步与同步


异步:不等任务执行完,就直接执行下一个任务;书写顺序和执行顺序不一样

下面这个代码的书写顺序是 1 -> 2 -> 3;但是执行顺序是 1 -> 3 -> 2。这就是异步


console.log(1)
setTimeout(function(){
  console.log(2)
},0)
console.log(3)

同步: 一定要等任务执行完了,得到结果,才执行下一个任务。

function A = function(){
  return '同步任务的返回值'
}
var result = A() // 那么 result 就是同步任务的结果
B()             // 然后执行下一个任务

同步:是所有的操作都做完,才返回给用户结果。即写完数据库之后,再响应用户,用户体验不好。


异步:不用等所有操作都做完,就响应用户请求。即先响应用户请求,然后慢慢去写数据库,用户体验较好。


如何判断同步异步?

如果一个函数的返回值处于 setTimeout, AJAX,addEventListener这三个东西内部,那么这个函数就是异步函数


回调函数


你写给别人用的函数就是回调函数


Promise


Promise 是异步编程的一种解决方案:从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。

promise是用来解决两个问题的:


  • 回调地狱,代码难以维护, 常常第一个的函数的输出是第二个函数的输入这种现象
  • promise可以支持多个并发的请求,获取并发请求中的数据


跨域


浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议有一个不同,都是跨域;

即指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制


同源策略


同源定义: 如果两个url的协议,域名,端口号完全一致,那么这两个url就是同源的

源: 在任意一个浏览器打印 window.origin 或location.origin可以得到当前源

源=协议+域名+端口号

同源策略定义: 浏览器规定,如果JS运行在源A里,那么就只能获取源A的数据不能获取源B的数据,即不允许跨域。目的就是为了保护用户隐私


CORS


CORS: 跨源资源共享

就是解决不同源之间数据的访问

在被访问源的响应头里提前声明,指明此数据谁可以访问: http://dong.com:9990可以访问了

response.setHeader("Access-Control-Allow-Origin", "http://dong.com:9990");

微信图片_20230106154618.png

但是IE 6,7,8,9 不支持CORS,可以使用JSONP


JSONP


JSONP : 在跨域的时候浏览器不支持cors,必须使用另外一种方式跨域,于是我们就请求一个js文件,这个js文件会执行一个回调,回调里面就有我们的数据,回调函数名字可以是一个随机数,把这个名字以callback参数传给后台,后台会把这个参数返回过来并执行;

优点: 兼容ie,可以跨域

缺点: 由于是script标签,它拿不到状态码和响应头,只知道成功和失败,只能发get请求,不支持post

1.jsonp跨域方法是新建一个js文件里面写上一个占位符{{data}}
2.在后端路由里将json数据文件转化成字符串
3.再将js文件转化成字符串
4.然后用json字符串 替换掉{{data}}

微信图片_20230106154756.png

这样就可以跨域访问了,但是还是有一个问题,这个js所有人都可以访问,不安全

解决方法:是由referer检验,在路由哪判断一下是否允许访问

目录
相关文章
|
13天前
|
JSON JavaScript 前端开发
js跨域实现
【10月更文挑战第31天】在实际开发中,需要根据具体的需求和项目情况选择合适的跨域解决方案。
16 1
|
9天前
|
JSON 前端开发 JavaScript
在 JavaScript 中,如何使用 Promise 处理异步操作?
通过以上方式,可以使用Promise来有效地处理各种异步操作,使异步代码更加清晰、易读和易于维护,避免了回调地狱的问题,提高了代码的质量和可维护性。
|
5月前
|
前端开发 JavaScript 数据处理
在JavaScript中,异步函数是指那些不会立即执行完毕,而是会在未来的某个时间点(比如某个操作完成后,或者某个事件触发后)才完成其执行的函数
【6月更文挑战第15天】JavaScript中的异步函数用于处理非同步任务,如网络请求或定时操作。它们使用回调、Promise或async/await。
52 7
|
1月前
|
前端开发 JavaScript 开发者
JS 异步解决方案的发展历程以及优缺点
本文介绍了JS异步解决方案的发展历程,从回调函数到Promise,再到Async/Await,每种方案的优缺点及应用场景,帮助开发者更好地理解和选择合适的异步处理方式。
|
1月前
|
移动开发 JavaScript 前端开发
【JavaScript】JS执行机制--同步与异步
【JavaScript】JS执行机制--同步与异步
21 0
|
2月前
|
JavaScript 前端开发
一个js里可以有多少个async function,如何用最少的async function实现多个异步操作
在 JavaScript 中,可以通过多种方法实现多个异步操作并减少 `async` 函数的数量。
|
2月前
|
JSON 前端开发 JavaScript
一文看懂 JavaScript 异步相关知识
一文看懂 JavaScript 异步相关知识
31 4
|
3月前
|
存储 JavaScript API
Node.js中的异步API
【8月更文挑战第16天】
35 1
|
4月前
|
数据采集 JavaScript Python
【JS逆向课件:第十三课:异步爬虫】
回调函数就是回头调用的函数
|
3月前
|
SQL JavaScript 前端开发
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题