AJAX(Async JavaScript AND XML)
用JS发送请求和接收响应,这就是AJAX的全部内容
AJAX是浏览器上的功能
- 浏览器可以发送请求,接收响应
- 浏览器在window上加一个XMLHttpRequest函数
- 用这个构造函数(类)可以构造出一个对象
- JS通过实现它来发送请求,接收响应
AJAX应用的四个步骤
- 创建XMLHttpRequest对象(全称是XMLHttpRequest)
- 调用对象的OPEN方法
- 监听对象的onload&onerror事件,当然用onreadystatechange事件更靠谱
- 专业前端会用onreadystatechange
- 调用对象的send方法(发送请求)
下面代码用ajax代码实现加载css\js\html\XML\json\分页
if(path === '/index.html'){
response.statusCode = 200
response.setHeader('Content-Type', 'text/html;charset=utf-8')
let string = fs.readFileSync("public/index.html").toString();
// response.write(`<link rel="stylesheet" href="./style.css"><h1>你好</h1><br/><h2>你是一个小彩笔!</h2>`)
const page1 = fs.readFileSync("db/page1.json").toString();
const array = JSON.parse(page1);
const result = array.map(item=>`<li>${item.id}</li>`).join('');
string = string.replace('{page1}',`<ul id="xxx">${result}</ul>`);
response.write(string);
response.end()
} else if(path === '/xml.xml'){
response.statusCode = 200
response.setHeader('Content-Type', 'text/xml;charset=utf-8')
let string = fs.readFileSync("public/xml.xml");
// response.write(`<link rel="stylesheet" href="./style.css"><h1>你好</h1><br/><h2>你是一个小彩笔!</h2>`)
response.write(string);
response.end()
}else if(path === '/page2'){
response.statusCode = 200
response.setHeader('Content-Type', 'text/json;charset=utf-8')
response.write(fs.readFileSync('db/page2.json'))
response.end()
} else if(path === '/page3'){
response.statusCode = 200
response.setHeader('Content-Type', 'text/json;charset=utf-8')
response.write(fs.readFileSync('db/page3.json'))
response.end()
}else if(path === '/test.html'){
response.statusCode = 200
response.setHeader('Content-Type', 'text/html;charset=utf-8')
let string = fs.readFileSync("public/test.html");
// response.write(`<link rel="stylesheet" href="./style.css"><h1>你好</h1><br/><h2>你是一个小彩笔!</h2>`)
response.write(string);
response.end()
} else if(path === '/main.js'){
response.statusCode = 200
response.setHeader('Content-Type', 'text/javascript;charset=utf-8');
let string = fs.readFileSync("public/main.js");
response.write(string);
response.end()
}else if(path === '/test.js'){
response.statusCode = 200
response.setHeader('Content-Type', 'text/javascript;charset=utf-8');
let string = fs.readFileSync("public/test.js");
response.write(string);
response.end()
} else if(path === '/style.css'){
response.statusCode = 200
response.setHeader('Content-Type', 'text/css;charset=utf-8');
let string = fs.readFileSync("public/style.css");
response.write(string);
response.end()
}else if(path === '/json.json'){
response.statusCode = 200
response.setHeader('Content-Type', 'application/json;charset=utf-8');
let string = fs.readFileSync("public/json.json");
response.write(string);
response.end()
} else {
response.statusCode = 404
response.setHeader('Content-Type', 'text/html;charset=utf-8')
response.write(`你访问的页面不存在!`)
response.end()
}
<!DOCTYPE html>
<html lang="zh">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>ajax测试示例</title>
</head>
<body>
<h1>ajax测试demo <span id="myName"></span></h1>
<p>
<button id="cssBtn">请求CSS</button>
<button id="jsBtn">请求JS</button>
<button id="htmlBtn">请求HTML</button>
<button id="xmlBtn">请求XML</button>
<button id="jsonBtn">请求JSON</button>
<button id="pageBtn">请求下一页</button>
</p>
<div>
{{page1}}
</div>
<script src="main.js"></script>
</body>
</html>
let n = 1;
cssBtn = document.querySelector('#cssBtn'),
jsBtn = document.querySelector('#jsBtn'),
xmlBtn = document.querySelector('#xmlBtn'),
jsonBtn = document.querySelector('#jsonBtn'),
pageBtn = document.querySelector('#pageBtn'),
htmlBtn = document.querySelector('#htmlBtn');
pageBtn.onclick = () => {
let request = new XMLHttpRequest();
request.open("GET",`/page${n+1}`);
request.onreadystatechange = ()=>{
let states = request.readyState,
stauts = request.status;
if(states === 4 && stauts === 200){
const array = JSON.parse(request.response);
array.forEach(element => {
const li = document.createElement('li');
li.textContent = element.id;
xxx.appendChild(li);
});
n +=1;
}
}
request.send();
}
jsonBtn.onclick = () => {
let request = new XMLHttpRequest();
request.open("GET","/json.json");
request.onreadystatechange = ()=>{
let states = request.readyState,
stauts = request.status;
if(states === 4 && stauts === 200){
let json = request.response,
obj = JSON.parse(json);
myName.textContent = obj.name;
}
}
request.send();
}
xmlBtn.onclick = ()=>{
let request = new XMLHttpRequest();
request.open("GET","/xml.xml");
request.onreadystatechange = () => {
let states = request.readyState,
status = request.status;
if(states === 4 && status === 200){
let dom = request.responseXML;
//注意我的系统此处是null
console.log(request.responseXML);
if(null === dom){
dom = request.response;
console.log(dom);
}else{
let text = dom.getElementsByTagName('waring')[0].textContent;
console.log(text);
}
}
}
request.send();
}
htmlBtn.onclick = ()=>{
let request = new XMLHttpRequest();
request.open("GET","/test.html");
request.onreadystatechange = () =>{
let states = request.readyState,
status = request.status;
if(states === 4 && status === 200){
let div = document.createElement("div");
div.innerHTML = request.response;
document.body.appendChild(div);
}
}
request.send();
}
jsBtn.onclick = ()=>{
let request = new XMLHttpRequest();
request.open("GET","/test.js");
request.onreadystatechange = () =>{
let states = request.readyState,
status = request.status;
if(states === 4 && status === 200){
let script = document.createElement("script");
script.innerHTML = request.response;
document.body.appendChild(script);
}
}
request.send();
}
cssBtn.onclick = ()=>{
let request = new XMLHttpRequest();
request.open("GET","/style.css");
request.onreadystatechange = () =>{
let states = request.readyState,
status = request.status;
if(states === 4 && status === 200){
let style = document.createElement("style");
style.innerHTML = request.response;
document.head.appendChild(style);
}
}
request.send();
}
JSON
理解
- JSON是一门语言
- JSON是一门标记语言,用来展示数据
- 与HTML、CSS、XML、JavaScript一样,是一门独立的语言
- 请注意,我们应该说JSON中的对象而不是直接说JSON对象
- 中文官网
- 支持的数据类型
- string-只支持双引号,不支持单引号和无引号
- number-支持科学记数法
- bool-true || false
- null-没有undefined
- object
- array
- 不支持函数,不支持变量
window.JSON
- JSON.parse
- 将jSON格式的数据转换为JS对应类型的数据
- JSON字符串 => JS数据
- JSON6种数据,所以转换也只有6种
- 不符合JSON语法,抛出Error对象
- 一般用try/catch捕获错误
- JSON.stringify
- JSON.parse的逆运算
- JS数据 => JSON字符串
- 由于JS的数据类型比JSON多,因此不一定能成功
- 如果失败,抛出Error对象