Skip to content

Commit 5311f64

Browse files
committed
ajax&node
1 parent c98191d commit 5311f64

File tree

8 files changed

+187
-5
lines changed

8 files changed

+187
-5
lines changed

WEEK9/AJAX-BASE-INFO/PPT/AJAX.html

Lines changed: 37 additions & 5 deletions
Large diffs are not rendered by default.

WEEK9/AJAX-BASE-INFO/PPT/AJAX.pdf

39.3 KB
Binary file not shown.

WEEK9/AJAX-BASE-INFO/PPT/AJAX.zip

-22.4 KB
Binary file not shown.

WEEK9/AJAX-BASE-INFO/ajax-jq.html

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport"
6+
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
7+
<title>珠峰培训</title>
8+
</head>
9+
<body>
10+
<script src="js/jquery-1.11.3.min.js"></script>
11+
<script>
12+
$.ajax({
13+
url: '',//->我们当前需要请求的URL地址
14+
method: '',//->请求的方式(GET系列/POST系列) 老版本JQ中使用的不是METHOD,而是TYPE(现在使用TYPE和使用METHOD是一样的);ZEPTO中只支持TYPE,不支持METHOD;
15+
dataType: 'json',//->'TEXT(默认)/JSON/XML...' 预设置服务器返回的数据格式(此处输入的属性值并不会影响服务器的返回结果,服务器返回给客户端的数据依然是事先商定好的,可能是字符串,可能是XML数据),而预设的值是把服务器返回的结果再次转换为我们需要的数据格式
16+
data: {
17+
name: 'zxt',
18+
age: 27
19+
},//->DATA:可以传递一个对象,也可以传递一个字符串,即使传递的是一个对象,它也会把对象转换为字符串('name=zxt&age=27');它的作用是向服务器传递内容,而且如果请求的方式是GET系,JQ会把字符串放在URL的末尾传递给服务器,如果是POST系,JQ会把内容放在请求主体中传递给服务器;
20+
async: true,//->设置同步异步:默认是TRUE异步,FALSE是同步
21+
cache: true,//->在GET系请求下,我们可以通过CACHE设置是否清除缓存,TRUE是默认值代表不清除,FALSE代表清除(和我们之前提到的方式一样,JQ也是在请求的URL末尾追加一个随机数来清除的缓存)
22+
success: function (result) {
23+
24+
}//->SUCCESS:当客户端已经从服务器端把数据获取完成了(READY-STATE===4),会触发这个回调函数执行,RESULT就是从服务器端获取的内容(当前内容经过了处理,JQ按照DATA-TYPE预设的值,把服务器返回的数据已经解析为我们想要的格式了)
25+
});
26+
27+
//=>回去后:参考JQ的API文档或者其它文献,总结JQ中AJAX方法可配置的属性及其含义,按照咱们后续写的AJAX方法库思想,自己使用原生JS封装一款类似于JQ的AJAX库
28+
</script>
29+
</body>
30+
</html>

WEEK9/AJAX-BASE-INFO/ajax.html

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport"
6+
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
7+
<title>珠峰培训</title>
8+
</head>
9+
<body>
10+
<script src="js/ajax.js"></script>
11+
<script>
12+
ajax({
13+
url: 'temp.json',
14+
method: 'post',
15+
dataType: 'json',
16+
async: true,
17+
data: {
18+
name: '张三',
19+
age: 16
20+
},
21+
cache: false,
22+
success: function (result) {
23+
console.log(result);
24+
}
25+
});
26+
</script>
27+
</body>
28+
</html>

WEEK9/AJAX-BASE-INFO/js/ajax.js

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
~function () {
2+
let queryChar = (url)=> url.indexOf('?') > -1 ? '&' : '?';
3+
4+
//=>把对象转换为字符串
5+
let formatObj = (obj)=> {
6+
let str = ``;
7+
for (let key in obj) {
8+
if (obj.hasOwnProperty(key)) {
9+
str += `${key}=${obj[key]}&`;
10+
}
11+
}
12+
str.length > 0 ? str = str.substring(0, str.length - 1) : null;
13+
return str;
14+
};
15+
16+
let ajax = (options)=> {
17+
//->init parameter
18+
let _default = {
19+
url: null,
20+
method: 'get',
21+
dataType: 'text',
22+
data: null,
23+
async: true,
24+
cache: true,
25+
success: null
26+
};
27+
for (let key in options) {
28+
if (options.hasOwnProperty(key)) {
29+
if (key === 'type') {
30+
_default['method'] = options['type'];
31+
continue;
32+
}
33+
_default[key] = options[key];
34+
}
35+
}
36+
let {url, method, dataType, data, async, cache, success}=_default;
37+
38+
let regGet = /^(GET|DELETE|HEAD)$/i;
39+
//=>DATA
40+
if (data) {
41+
if (Object.prototype.toString.call(data) === '[object Object]') {
42+
//=>传递的是一个对象,我们要把其转换为字符串'KEY=VALUE&KEY=VALUE...'
43+
data = formatObj(data);
44+
}
45+
//=>如果当前请求是GET系列的,我们把DATA拼接在URL后面
46+
if (regGet.test(method)) {
47+
url += `${queryChar(url)}${data}`;
48+
data = null;
49+
}
50+
}
51+
52+
//=>CATCH
53+
if (regGet.test(method) && cache === false) {
54+
url += `${queryChar(url)}_=${Math.random()}`;
55+
}
56+
57+
//->send ajax
58+
let xhr = new XMLHttpRequest;
59+
xhr.open(method, url, async);
60+
xhr.onreadystatechange = function () {
61+
if (xhr.readyState === 4 && xhr.status === 200) {
62+
//=>DATA-TYPE
63+
let result = xhr.responseText;
64+
switch (dataType.toUpperCase()) {
65+
case 'JSON':
66+
result = 'JSON' in window ? JSON.parse(result) : eval('(' + result + ')');
67+
break;
68+
case 'XML':
69+
result = xhr.responseXML;
70+
break;
71+
}
72+
73+
//=>SUCCESS
74+
//->typeof success === 'function' ? success(result) : null;
75+
success && success(result);
76+
}
77+
};
78+
xhr.send(data);
79+
};
80+
window.ajax = ajax;
81+
}();

WEEK9/AJAX-BASE-INFO/js/jquery-1.11.3.min.js

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

WEEK9/AJAX-BASE-INFO/temp.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[
2+
{
3+
"name": "zhufeng",
4+
"age": 8
5+
}
6+
]

0 commit comments

Comments
 (0)