当前位置: 首页 > news >正文

同源策略以及回调地狱和方法

#同源策略

1 同源策略就是浏览器发送请求给的限制。
触发同源策略的条件:传输协议、域名、端口号,任意一个不一样搜会触发,对于触发同源策略的请求就叫做跨域请求。

2 跨域请求的三种方式
Jsonp跨域请求–src的引入
Cors跨域资源共享,由服务端进行配置,表示允许某一客户端的请求,客户端依旧使用ajax方式进行发送请求。
代理跨域:-浏览器不允许、非同源的请求。
(1)Jsonp中
① script标签会把请求回来的所有内容当做js代码执行
② Script标签默认有type属性,值是text/javascript,不管src请求什么文件,都会把文件里的内容当做字符串读取。
③ Script标签放入src属性不受同源策略的影响。
④ Jsonp.php中,只要有php标签对,就会按照php代码解析,没有php标签,就会按照字符串交给script标签。
(2)Cors跨越
Cors跨越是浏览器不让我们请求其他服务器,如果其他服务器告知浏览器可以请求,那么才不会阻止。

<?php // 以下三个可以实现cors的跨域请求,资源共享 header("Access-Control-Allow-Origin:*");//允许哪些域名请求 header("Access-Control-Request-Methods:GET, POST, PUT, DELETE, OPTIONS");//允许哪些请求方式 header('Access-Control-Allow-Headers:x-requested-with,content-type,test-token,test-sessid');//允许携带哪些请求头信息 ?>

(3)代理跨越proxy(服务器正向代理跨越)
浏览器不允许请求非同源的地址
解决问题的方法
在浏览器同源设置一个代理服务器
把要发送的目标服务器的请求,发给代理服务器
由代理服务器转发给目标服务器
目标服务器把响应返回给代理服务器
代理服务器在把响应给浏览器。
**

#回调函数

**
1 回调函数 是一种函数的应用方式。
他是出现在两个函数之间的关系,以形参的方式调用。
使用回调函数,就是为了在 异步 的末尾做某些事情。
Function fn(callback){
setTimeout(function(){
Console.log(‘测试’)
Callback(‘res’)
},1000)
}

Fn(function(res){
Console.log(res)
})

2 回调地狱:

函数多层嵌套,没有可为维护性和可读性,代码没有错误只是不好进行后期维护。
3 promise 承诺 es6 语法
Promise就是解决回调地狱的方法之一,能让回调地狱写的优雅一点,让代码拥有可读性和后期可维护性。

Promise有三个状态;一旦状态确定就不可更改

继续-成功 继续-失败
1 承诺继续pending,异步事情正在执行 -状态 0
2 承诺成功fulfilled,异步执行成果-结果data
Resolve回调函数.then(function(){})
3 承诺失败 rejected,异步事情执行失败-结果error
Reject
回调函数.catch(function(){})


Var p=new Promise(function(resolve,reject){
Let xhr=new XMLHttpRequest()
Xhr.open(‘get’,url)
Xhr.onreadystatechange=function(){
If (xhr.readyState=4&&xhr.status=200){
Resolve(xhr,rsponseText)
}
If(xhr.status===404){
Reject(‘失败’)
}
}
Xhr.send();
})
p.then (function(res){
Console.log(res)
})
p.catch(function(res){
Console.log(res)
})

4 async异步 await等待
await就是当后面跟的是promise对象,就让他停止,先让他执行里面的异步操作,在把结果返回给前面的新变量,在继续向后执行,他只生效当前作用域内部,也就是async函数内部。
pGetSend 是一个异步的ajax请求
Await会等待这个异步函数请求结束,并把结果给前面的res变量以后,在向后执行代码。

Async/await语法:他们是es7 的新增语法,是为promise设计的语法,是回调地狱的终极解决方案,就是用async/await语法把–异步代码写的看起来像同步代码。

语法规范:
1 async关键字写在–函数的前面,就把该函数变成了一个异步函数
2 await是一个写在 异步函数里面的关键字,await后边必须跟着promise对象。
满足这些条件,就可以把本该在promise的then回调里面接受的结果,放在await关键字前面定义一个变量来接受了。
async function fn(){
let res=await new Promise(function(resolve,reject){
})
}

相关文章:

  • redis 集群
  • 项目的简单描述加实例代码
  • 远程协助解决重建索引的危机问题
  • 解析、理解 cookie
  • 04-Windows频繁打开和关闭端口可能引发的问题 | 07.杂项
  • ajax的简单了解,适合刚进门 的,注释相对比较详细
  • Android——shape和selector和layer-list的(详细说明 转)
  • ajax的兼容问题
  • 对象管理器(defineProperty)学习笔记
  • ajax的登录页面,发送post方式
  • AHK 中 = 和 == 等比较运算符的用法
  • nodejs的简单分析理解
  • NPM的操作步骤
  • Zabbix监控Windows主机
  • promise解决回调地狱的方法之一
  • 【翻译】babel对TC39装饰器草案的实现
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 03Go 类型总结
  • AHK 中 = 和 == 等比较运算符的用法
  • Apache的80端口被占用以及访问时报错403
  • C++类中的特殊成员函数
  • Computed property XXX was assigned to but it has no setter
  • ES6 学习笔记(一)let,const和解构赋值
  • Javascript弹出层-初探
  • JavaScript实现分页效果
  • JS字符串转数字方法总结
  • Mybatis初体验
  • PAT A1050
  • PHP 7 修改了什么呢 -- 2
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Spring Cloud Feign的两种使用姿势
  • springMvc学习笔记(2)
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 动态魔术使用DBMS_SQL
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 使用API自动生成工具优化前端工作流
  • 为什么要用IPython/Jupyter?
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • MyCAT水平分库
  • ![CDATA[ ]] 是什么东东
  • #162 (Div. 2)
  • #define 用法
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (九)c52学习之旅-定时器
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)iOS字体
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • *** 2003
  • ******IT公司面试题汇总+优秀技术博客汇总
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET HttpWebRequest、WebClient、HttpClient
  • .net 流——流的类型体系简单介绍
  • .NET开源项目介绍及资源推荐:数据持久层
  • .NET性能优化(文摘)
  • /etc/shadow字段详解