我会使用Node.js 模拟服务器, 所以请先到官网下载Node.js
这个实例的完整代码及使用请到我的库中获取: AJAX-demo. 本文为了叙述方便利索只介绍核心代码
创建index.html
首先创建一个index.html文件, 在文件中写入如下代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>AJAX-demo</title>
</head>
<body>
<h1>这是AJAX-demo</h1>
<input id="button" type="button" value="点我后执行定义在main.js中的函数">
<script src="./main.js"></script>
</body>
</html>
假设我们要向服务器请求这个index.html 页面, 服务器会将此页面发送个浏览器作为响应.
浏览器会解析index.html 页面, 当解析到script 标签时, 它会再向服务其发送请求, 服务器根据src 属性指向的地址返回相应的文件. 注意src 指向的是资源的URL , 而不是文件
上面这句话是铺垫.
创建main.js
我们的main.j如下, 在main.js文件中定义函数, 这个函数会进行AJAX通信:
button.addEventListener('click', function(e) {
let xhr = new XMLHttpRequest()
xhr.onreadystatechange = function(e) {
if (xhr.readyState === 4) {
let string = xhr.responseText;
let object = JSON.parse(string)
console.log(object)
console.log("object: "+object)
console.log("object.people.name: "+object.people.name)
console.log(object.others['two'])
console.log("object.others['two']: "+object.others['two'])
console.log("object.others['two'].parents[0]: "+object.others['two'].parents[0])
}
}
xhr.open('GET', '/xxx', true)
xhr.send()
})
监听按钮, 若按钮发生点击事件, 则发生AJAX通信
创建server.js
为了叙述我只介绍重要的部分, 完整的代码请去我的github库-AJAX-demo中获取
我们通常在输入如:www.example.com 的网址时浏览器发送请求, 服务器发送index.html 页面作为响应, 因此我们需要在后台加入下面的代码:
if(path === '/'){
let page = fs.readFileSync('./index.html', 'utf8')
response.statusCode = 200
response.setHeader('Content-Type', 'text/html;charset=utf-8')
response.write(page)
response.end()
}
因为index.html 页面中含有script 标签, 所以我们还要添加处理src 地址的代码:
if (path === '/main.js') {
let js = fs.readFileSync('./main.js', 'utf8')
response.statusCode = 200
response.setHeader('Content-Type', 'text/html;charset=utf-8')
response.write(js)
response.end()
}
执行上面两段代码后, index.html 及其引用的文件就全部加载完了
我们在main.js 中监听按钮的点击事件, 若发生点击向服务器发送请求. 服务处理这个请求的代码如下:
if (path === '/xxx') {
response.statusCode = 200
response.setHeader('Content-Type', 'text/html;charset=utf-8')
response.write(`
{
"people": {
"name": "helloyong",
"age": 20,
"sex": "man",
"isGay": false
},
"others": {
"one": {
"name": "bugyong",
"age": 21,
"sex": "woman",
"children": null
},
"two": {
"name": "stackyong",
"age": 22,
"parents": ["father", "mother"]
}
}
}
`) .
response.end()
}
至此, 我们的server.js 文件的核心代码编写完了. 剩下的都是一些边边角角落.
运行
再次提醒, 我们需要使用Node.js 作为服务器.
在命令行下, 输入node server.js 8888 的命令, 会出现如下字符:
监听 8888 成功
请在浏览器打开 http:
这个字符是我们在server.js 文件中设置. 为啥要使用node server.js 8888 ? 因为这个也是在server.js 中设置的. 这个不是核心, 核心是理解AJAX 通信.
此时不要关闭命令行窗口, 在浏览器中输入http://localhost:8888 地址, 会看到如下页面:
打开控制台, 点击按钮, 我们可以在控制台中看见获取的信息:
 |