大家好呀!我是小笙,我来简述一些前端知识。

方案一:JQuery + Ajax
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript" src="./jquery3.6.0/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(function() {
$("#btn").click(function() {
$.getJSON(
"./data/monster.json",
function(data, status, XHttp) {
let {id,name,age} = data;
// Callback Hell
$.getJSON(
`./data/monster_detail_${id}.json`,
function(data, status, XHttp) {
console.log(data);
}
)
},
)
})
})
</script>
</head>
<body>
<button id="btn" type="button">按钮(发出Ajax请求)</button>
</body>
</html>
数据存储暂时用json文件代替
// monster.json
{
"id": 1,
"name":"孙悟空",
"age": 500
}
// monster_detail_1.json
{
"id": 1,
"ability":"72变",
"skill": "翻江倒海",
"address": "花果山"
}
方案二:Promise链式调用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript" src="jquery3.6.0/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
// (resolve,reject)参数列表 (备注:resolve,reject名字可以自己定)
// resolve: 如果请求成功,可以调用resolve函数
// reject: 如果请求失败,可以调用reject函数
let promise = new Promise((resolve, reject) => {
$.getJSON(
`data/monster.json`,
function(data, status, XHttp) {
console.log(data);
resolve(data);
}
)
}).then((data => {
return new Promise((resolve, reject) => {
$.getJSON(
`data/monster_detail_${data.id}.json`,
function(data, status, XHttp) {
console.log(data);
resolve(data);
}
)
})
})).then(
(data => {
return new Promise((resolve, reject) => {
$.getJSON(
`data/monster_girl_${data.girlId}.json`,
function(data, status, XHttp) {
console.log(data);
}
)
})
})
)
</script>
</head>
<body>
</body>
</html>
数据存储暂时用json文件代替
// monster.json
{
"id": 1,
"name":"孙悟空",
"age": 500
}
// monster_detail_1.json
{
"id": 1,
"ability":"72变",
"skill": "翻江倒海",
"address": "花果山",
"girlId":2
}
// monster_girl_2.json
{
"id": 2,
"name":"XXX",
"age": 400
}
方案三:promise 代码优化/重排
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript" src="jquery3.6.0/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
// 这里我们将重复的代码,抽出来,编写一个方法 get(url, data)
function get(url, data) {
return new Promise((resolve, reject) => {
$.ajax({
url: url,
data: data,
success(resultData) {
resolve(resultData);
},
error(err) {
reject(err);
}
})
})
}
//1. 先获取 monster.json
//2. 获取 monster_detail_1.json
//2. 获取 monster_girl_2.json
get("data/monster.json").then((resultData) => {
//第 1 次 ajax 请求成功后的处理代码
console.log("第 1 次 ajax 请求返回数据=", resultData);
return get(`data/monster_detail_${resultData.id}.json`);
}).then((resultData) => {
//第 2 次 ajax 请求成功后的处理代码
console.log("第 2 次 ajax 请求返回数据=", resultData);
return get(`data/monster_girl_${resultData.girlId}.json`);
}).then((resultData) => {
//第 3 次 ajax 请求成功后的处理代码
console.log("第 3 次 ajax 请求返回数据=", resultData);
//继续..
}).catch((err) => {
console.log("promise 请求异常=", err);
})
</script>
</head>
<body>
</body>
</html>

思路分析

代码示例
// function.js
const sum = function(a, b) {
return parseInt(a) + parseInt(b);
}
const sub = function(a, b) {
return parseInt(a) - parseInt(b);
}
let name = "罗念笙";
let age = 18;
// module.exports = {
// sum: sum,
// sub: sub,
// name: name,
// age: age
// }
// 如果属性名和函数/变量/对象..名字相同,可以简写
module.exports = {
sum,
sub,
name,
age
}
// use.js
const m = require("./function.js");
// 解构赋值
const {sub} = require("./function.js");
console.log(m.sub("100","200"));
console.log(m.sum(10,90));
console.log(m.name)
console.log(m.age);
console.log(sub(19,8));
注意:ES6 的模块化无法在 Node.js 中执行,需要用 Babel 转码 ES5 后再执行
思路分析

代码示例
第一种导出模块/数据:export{对象,函数,变量,常量等}
const sum = function(a, b) {
return parseInt(a) + parseInt(b);
}
const sub = function(a, b) {
return parseInt(a) - parseInt(b);
}
let name = "罗念笙";
let age = 18;
export{
sum,
sub,
name,
age
}
// Babel 转码 ES5
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.sum = exports.sub = exports.name = exports.age = void 0;
var sum = function sum(a, b) {
return parseInt(a) + parseInt(b);
};
exports.sum = sum;
var sub = function sub(a, b) {
return parseInt(a) - parseInt(b);
};
exports.sub = sub;
var name = "罗念笙";
exports.name = name;
var age = 18;
exports.age = age;
第一种导入模块/数据:import {名称} from “XX.js”
import{
sum,
sub,
name,
age
} from "./common.js";
console.log(name);
console.log(age);
console.log(sub(4,2));
console.log(sum(3,4));
// Babel 转码 ES5
"use strict";
var _common = require("./common.js");
console.log(_common.name);
console.log(_common.age);
console.log((0, _common.sub)(4, 2));
console.log((0, _common.sum)(3, 4));
第二种:export 对象/函数 = {}
export const sum = function(a,b){
return parseInt(a) + parseInt(b);
}
// Babel 转码 ES5
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.sum = void 0;
var sum = function sum(a, b) {
return parseInt(a) + parseInt(b);
};
exports.sum = sum;
第一种导入模块/数据:import {名称} from “XX.js”
import{
sum,
} from "./common2.js";
console.log(sum(5,4));
// Babel 转码 ES5
"use strict";
var _common = require("./common2.js");
console.log((0, _common.sum)(5, 4));
第三种:export default{对象,函数,变量,常量等}
export default{
// 注意对象的变化 var 对象名 = {} => 对象名:{}
// 注意函数的变化 const sum = function(a,b) => sum(a,b)
sum(a,b){
return parseInt(a) + parseInt(b);
},
name:"罗念笙",
age:18
}
// Babel 转码 ES5
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _default = {
sum: function sum(a, b) {
return parseInt(a) + parseInt(b);
},
name: "罗念笙",
age: 18
};
exports.default = _default;
第二种是针对默认导出的 import 名称 from “XX.js”
import m from "common3.js";
console.log(m.age);
console.log(m.name);
console.log(m.sum(3,4));
// Babel 转码 ES5
"use strict";
var _common = _interopRequireDefault(require("common3.js"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
console.log(_common.default.age);
console.log(_common.default.name);
console.log(_common.default.sum(3, 4));