-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontent.json
1 lines (1 loc) · 9.16 KB
/
content.json
1
{"meta":{"title":"司齐的个人博客","subtitle":"","description":"","author":"司齐","url":"http://siqi47.cn","root":"/"},"pages":[],"posts":[{"title":"javascript的this","slug":"javascript的this","date":"2020-11-26T12:19:33.491Z","updated":"2020-11-25T08:34:32.146Z","comments":true,"path":"2020/11/26/javascript的this/","link":"","permalink":"http://siqi47.cn/2020/11/26/javascript%E7%9A%84this/","excerpt":"","text":"this 笔记在方法内部,this指向当前对象 1234567891011var xiaoming = { name: '小明', birth: 1990, age: function () { var y = new Date().getFullYear(); return y - this.birth; }};xiaoming.age; // function xiaoming.age()xiaoming.age(); // 今年调用是25,明年调用就变成26了,this指向xiaoming 12345678910111213141516function getAge() { var y = new Date().getFullYear(); return y - this.birth;}var xiaoming = { name: '小明', birth: 1990, age: getAge};xiaoming.age(); // 25, 正常结果,this指向xiaominggetAge(); // NaN,this指向windowvar fn = xiaoming.age; // 先拿到xiaoming的age函数fn(); // NaN,this指向window 1234567891011121314151617'use strict';var xiaoming = { name: '小明', birth: 1990, age: function () { function getAgeFromBirth() { var y = new Date().getFullYear(); return y - this.birth; } return getAgeFromBirth(); }};xiaoming.age(); // Uncaught TypeError: Cannot read property 'birth' of undefined//this指向undifined,在非strict模式下,指向window 解决方法,使用var that = this,用that代替this 12345678910111213141516'use strict';var xiaoming = { name: '小明', birth: 1990, age: function () { var that = this; // 在方法内部一开始就捕获this function getAgeFromBirth() { var y = new Date().getFullYear(); return y - that.birth; // 用that而不是this } return getAgeFromBirth(); }};xiaoming.age(); // 25 使用apply函数指定this指向哪个对象(第一个参数是this要指向的对象,第二个参数是array表示函数本身的参数 12345678910111213function getAge() { var y = new Date().getFullYear(); return y - this.birth;}var xiaoming = { name: '小明', birth: 1990, age: getAge};xiaoming.age(); // 25getAge.apply(xiaoming, []); // 25, this指向xiaoming, 参数为空 call函数: 与apply函数不同的是apply把参数打包成array,call函数直接把参数按顺序传入 普通函数调用通常把this绑定为null","categories":[],"tags":[]},{"title":"CORS总结","slug":"CORS总结","date":"2020-11-25T03:27:37.564Z","updated":"2020-11-25T02:59:49.426Z","comments":true,"path":"2020/11/25/CORS总结/","link":"","permalink":"http://siqi47.cn/2020/11/25/CORS%E6%80%BB%E7%BB%93/","excerpt":"","text":"CORS要点总结本文根据阮一峰的跨域资源共享CORS详解总结 CORS请求 简单请求 12345678910111213(1)请求方法 HEAD GET POST(2)HTTP头信息不超过以下字段 Accept Accept-Language Content-Language Last-Event-ID Content-Type:只限于三个值 application/x-www-form-urlencoded multipart/form-data text/plain 浏览器处理流程 基本流程 直接发出CORS请求 1234567GET /cors HTTP/1.1Origin: http://api.bob.comHost: api.alice.comAccept-Language: en-USConnection: keep-aliveUser-Agent: Mozilla/5.0... Origin字段说明请求来自哪个源(协议+域名+端口),服务器根据这个值决定是否同意这次请求 如果Origin指定的源不在许可范围内,服务器会返回一个正常的HTTP回应,浏览器发现回应的头信息没有包括Access-Control-Allow-Origin字段,就知道出错了,从而抛出错误被XmlHttpRequest的onerror回调函数捕获。 注意:这种错误无法通过状态码识别,因为HTTP回应的状态码有可能是200 - 如果Origin指定的域名在许可范围内,服务器返回的响应会多出几个头信息字段 12345Access-Control-Allow-Origin: http://api.bob.comAccess-Control-Allow-Credentials: trueAccess-Control-Expose-Headers: FooBarContent-Type: text/html; charset=utf-8 1. **Access-Control-Allow-Origin** 该字段时必须的,他的值要么是请求时Origin字段的值,要么是一个*****(表示接受任意域名的请求) 2. **Access-Control-Allow-Credentials** 该字段可选,布尔类型,表示是否允许发送Cookie。默认不发送Cookie。设为true表示可以发送Cookie。不允许发送Cookie,删除该字段即可(该字段值只能为true) 3. **Access-Control-Expose-Headers** 该字段可选。CORS请求时,XmlHttpRequest 对象的getResponseHeader()方法只能拿到6个基本字段 123456Cache-ControlContent-LanguageContent-TypeExpiresLast-ModifiedPrama 如果想要获取其他字段,就必须在Access-Control-Expose-Headers指定 2. withCredentials 属性 CORS默认不发送Cookie和HTTP认证信息,如果要把Cookie发送到服务器,需要 1. 指定Access-Control-Allow-Credentials字段 1Access-Control-Allow-Credentials: true 2. 开发者必须在AJAX请求中打开withCredentials属性 12var xhr = new XMLHttpRequest();xhr.withCredentials = true; *注意:如果省略withCredentials设置,有的浏览器还是会发送Cookie,可以显示关闭它* *注意:如果要发送Cookie,Access-Control-Allow-Origin的值不能为*****。* 非简单请求(不同时满足上面两个条件) 预检请求(在正是通信前,增加一次HTTP查询请求) 浏览器发现非简单请求时,自动发出一个预检请求,要求服务器确认可以这样的请求 123456789OPTIONS /cors HTTP/1.1Origin: http://api.bob.comAccess-Control-Request-Method: PUTAccess-Control-Request-Headers: X-Custom-HeaderHost: api.alice.comAccept-Language: en-USConnection: keep-aliveUser-Agent: Mozilla/5.0... 预检请求使用的请求方法是OPTIONS,关键字段是Origin,表示请求来自哪个源。 预检请求头信息还包括两个特殊字段 - **Access-Control-Request-Method** 这个字段时必须的,用来列出浏览器的CORS请求会用到哪些HTTP方法 - **Access-Control-Request-Headers** 这个字段是一个逗号分隔的字符串,指定CORS请求会额外发送的头信息字段 2. 预检请求的回应 12345678910111213HTTP/1.1 200 OKDate: Mon, 01 Dec 2008 01:15:39 GMTServer: Apache/2.0.61 (Unix)Access-Control-Allow-Origin: http://api.bob.com /*表示可以请求数据*/Access-Control-Allow-Methods: GET, POST, PUT /*表明服务器支持的所有跨域请求的方法*/Access-Control-Allow-Headers: X-Custom-Header /*表明服务器支持的所有头信息字段*/Content-Type: text/html; charset=utf-8Content-Encoding: gzipContent-Length: 0Keep-Alive: timeout=2, max=100Connection: Keep-AliveContent-Type: text/plain - **Access-Control-Max-Age** 可选字段,指定预检请求的有效期,单位为秒 如果服务器否定了预检请求,会返回正常的HTTP回应,没有任何CORS相关的头信息字段,浏览器会识别并打印报错信息 123XMLHttpRequest cannot load http://api.alice.com.Origin http://api.bob.com is not allowed by Access-Control-Allow-Origin. 3. 浏览器的正常请求和回应 一旦服务器通过了预检请求,以后正常的CORS请求就跟简单请求一样,会有一个Origin头信息字段 12345678PUT /cors HTTP/1.1Origin: http://api.bob.comHost: api.alice.comX-Custom-Header: valueAccept-Language: en-USConnection: keep-aliveUser-Agent: Mozilla/5.0... 服务器的正常回应 123Access-Control-Allow-Origin: http://api.bob.comContent-Type: text/html; charset=utf-8","categories":[],"tags":[]},{"title":"第一个博客","slug":"第一个博客","date":"2020-03-19T11:17:15.208Z","updated":"2020-03-25T09:45:13.493Z","comments":true,"path":"2020/03/19/第一个博客/","link":"","permalink":"http://siqi47.cn/2020/03/19/%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%8D%9A%E5%AE%A2/","excerpt":"这是真正意义上的第一个博客记录一下安装和使用android studio踩的坑","text":"这是真正意义上的第一个博客记录一下安装和使用android studio踩的坑 安装过程jre路径无法识别 安装的版本是3.3.0.0,原因不明 别问怎么解决的,问就是装另一个版本。 后来装了3.6.0.0 的版本。 报错信息: 15:49 Emulator: emulator: WARNING: EmulatorService.cpp:448: Cannot find certfile: D:\\software\\android_data\\ANDROID_AVD. android\\emulator-grpc.cer security will be disabled. 15:49 Emulator: Started GRPC server at 127.0.0.1:8554 未知错误,无影响,网上没有解决方法 报错信息:15:47 Error running ‘app’: Default Activity not found 这是因为开了多个工程,无法识别,所以把其他的工程关掉就好了 模拟器可以运行,但是项目无法安装成功,一直显示 Waiting for target device to come online 解决方法: 在AVD manager 下使用的模拟器点击wipe data","categories":[],"tags":[]},{"title":"first","slug":"first","date":"2020-03-18T14:05:17.384Z","updated":"2020-03-18T14:07:22.320Z","comments":true,"path":"2020/03/18/first/","link":"","permalink":"http://siqi47.cn/2020/03/18/first/","excerpt":"","text":"title:hello,this is a test##这是一个测试文件 你好","categories":[],"tags":[]}]}