Skip to content

Commit 255dd21

Browse files
committed
update
1 parent ef08f67 commit 255dd21

File tree

1 file changed

+125
-0
lines changed

1 file changed

+125
-0
lines changed

README.md

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
* [04-06](https://github.com/TYRMars/JSlearn#04-06) `BOM知识点`
3232
#### 05
3333
* [05-01](https://github.com/TYRMars/JSlearn#05-01) `事件-知识点`
34+
* [05-02](https://github.com/TYRMars/JSlearn#05-02) `Ajax-XMLHttpRequest`
3435

3536
---
3637

@@ -1265,6 +1266,130 @@ function bindEvent(elem,type,selector,fn) {
12651266
})
12661267
}
12671268
```
1269+
1270+
## 05-02
1271+
### Ajax-XMLHttpRequest
1272+
* 手动编写一个ajax,不依赖第三方库
1273+
* 跨域的几种实现方式
1274+
#### 知识点
1275+
##### XMLHttpRequest
1276+
1277+
```JavaScript
1278+
var xhr = new XMLHttpRequest();
1279+
xhr.open("GET","/api",false)
1280+
xhr.onreadystatechange = function () {
1281+
//这里的函数异步执行,可参考之前JS基础的异步模块
1282+
if(xhr.readyState == 4){
1283+
if (xhr.status == 200) {
1284+
alert(xhr.responseText)
1285+
}
1286+
}
1287+
}
1288+
xhr.send(null);
1289+
```
1290+
1291+
* IE低版本使用ActiveXObject,和W3C标准不一样
1292+
* IE低版本使用量已经非常少,很多网站早已不支持IE低版本
1293+
* 建议对IE低版本的兼容性:了解即可,无需深究
1294+
1295+
##### 状态码
1296+
```JavaScript
1297+
xhr.onreadystatechange = function () {
1298+
//这里的函数异步执行,可参考之前JS基础的异步模块
1299+
if(xhr.readyState == 4){
1300+
if (xhr.status == 200) {
1301+
alert(xhr.responseText)
1302+
}
1303+
}
1304+
}
1305+
```
1306+
* readyState
1307+
* 0-(未初始化)还没有调用send()方法
1308+
* 1-(载入)已调用send()方法,正在发送请求
1309+
* 2-(载入完成)send()方法执行完成,已经接收到全部响应内容
1310+
* 3-(交互)正在解析响应内容
1311+
* 4-(完成)响应内容解析完成,可以在客户端调用
1312+
* status
1313+
* 2XX-表示成功处理请求。如200
1314+
* 3XX-需要重定向,浏览器直接跳转
1315+
* 4XX-客户端请求错误,如404
1316+
* 5XX-服务端错误
1317+
##### 跨域
1318+
* 什么时跨域
1319+
* 浏览器有同源策略,不允许ajax访问其他域接口
1320+
* http://www.yourname.com/page1.html
1321+
* http://m.imooc.com/course/ajaxcourserecom?cid=459
1322+
* 跨域条件:协议、域名、端口、有一个不同就算跨域
1323+
* 但是有三个标签允许跨域加载资源
1324+
* `<img src=XXX>`
1325+
* `<link href=XXXX>`
1326+
* `<script src=XXX>`
1327+
* 三个标签的场景
1328+
* <img>用于打点统计,统计网站可能是其他域
1329+
* <link><script>可以使用CDNCDN的也是其他域
1330+
* <script>可以用于JSONP
1331+
* 跨域注意事项
1332+
* 所有的跨域请求都必须经过信息提供方允许
1333+
* 如果未经允许即可获得,那是浏览器同源策略出现漏洞
1334+
* JSONP
1335+
* 加载 http://coding.m.imooc.com/classindex.html
1336+
* 不一定服务器端真正有一个`classindex.html`文件
1337+
* 服务器可以根据请求,动态生成一个文件,返回
1338+
* 同理与<script src="http://coding.m.imooc.com/api.js">
1339+
1340+
* 假如你的网站要跨域访问慕课网的一个接口
1341+
* 给你一个地址http://coding.m.imooc.com/api.js
1342+
* 返回内容格式如callback({x:100,y:200})(可动态生成)
1343+
```html
1344+
<script>
1345+
window.callback = function (data) {
1346+
//这是我们跨域的到信息
1347+
console.log(data);
1348+
}
1349+
</script>
1350+
<script src="http://coding.m.imooc.com/api.js"></script>
1351+
<!-- 以上将返回 callback({x:100,y:200}) -->
1352+
```
1353+
* 服务器端设置http header
1354+
* 另外一个解决跨域的简洁方法,需要服务器来做
1355+
* 但是作为交互方,我们必须知道这个方法
1356+
* 是将来解决跨域问题的一个趋势
1357+
```JavaScript
1358+
//注意:不同后端语言的写法可能不一样
1359+
1360+
//第二个参数填写允许跨域的域名称,不建议直接写 “*”
1361+
response.setHeader("Access-Control-Allow-Origin","http://a.com, http://b.com");
1362+
response.setHeader("Access-Control-Allow-Header","X-Requested-With");
1363+
response.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
1364+
1365+
//接收跨域的cookie
1366+
response.setHeader("Access-Control-Allow-Credentials","true");
1367+
```
1368+
1369+
## 05-03
1370+
### 存储
1371+
* 请描述一下`cookie`,`sessionStorage``localStorage`的区别?
1372+
#### cookie
1373+
* 本身用于客户端和服务端通信
1374+
* 但是它有本地存储的功能,于是就被`借用`
1375+
* 使用document.cookie = ... 获取和修改即可
1376+
##### cookie用于存储的缺点
1377+
* 存储量小,只有4kb
1378+
* 所有http请求都带着,会影响获取资源的效率
1379+
* API简单,需要封装才能用document.cookie = ...
1380+
#### localStorage和sessionStorage
1381+
* HTML5专门为存储设计,最大容量5M
1382+
* API简答易用:
1383+
* localStorage.setItem(key,value);localStorage.getItem(key);
1384+
* sessionStorage关闭浏览器会清理
1385+
* iOS safari 隐藏模式下,localStorage.getItem会报错
1386+
* 建议统一使用try-catch封装
1387+
#### cookie sessionStorage localStorage 的区别
1388+
* 容量
1389+
* 是否会携带到ajax中
1390+
* API易用性
1391+
1392+
12681393
---
12691394

12701395
### JSDemo JS小程序

0 commit comments

Comments
 (0)