1
0
mirror of https://github.com/Daotin/Web.git synced 2024-11-01 05:24:46 +08:00
Web-main/06-Ajax/案例02:Ajax聊天室Node版.md
2020-12-30 11:39:04 +08:00

142 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

这个聊天室的案例是:
填写用户名和发送的消息,点击发送按钮,就会在textarea中显示出来。
node后台
```js
var http=require("http"); // 导入http.js文件
var msgList=[];
// 创建server服务
// req接收前端的数据
// res发送给前端的数据
var server=http.createServer(function (req,res) {
var data="";
// post请求接收数据的函数
// post接收到的数据就在函数的参数d里面
req.on("data",function (d) {
data+=d;
});
// get请求接收数据的函数
req.on("end",function () {
var obj=JSON.parse(decodeURIComponent(data));
if(obj.type===0){
delete obj.type;
msgList.push(obj);
}
res.writeHead(200,{"Access-Control-Allow-Origin":"*"});
res.write(encodeURIComponent(JSON.stringify(msgList)));
res.end();
})
});
// 地址 http://192.168.53.213:3002
server.listen(3002,"192.168.53.213",function () {
console.log("开启服务了");
});
```
前端代码:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#names{
width: 120px;
}
#msgs{
width: 680px;
}
</style>
</head>
<body>
<textarea id="msgText" rows="30" cols="120"></textarea>
<br>
<input id="names" type="text">:
<input id="msgs" type="text">
<button id="bn">发送</button>
<script>
// 接口文档
// 1、
// req
// type=0
// user="xie"
// msg="聊天信息"
// res
// [
// {user:"xie",msg:"聊天信息"},
// {user:"xie",msg:"聊天信息"},
// {user:"xie",msg:"聊天信息"},
// {user:"xie",msg:"聊天信息"},
// {user:"xie",msg:"聊天信息"},
// ]
// 2、实时获取聊天信息
// req
// type=1
// res
// [
// {user:"xie",msg:"聊天信息"},
// {user:"xie",msg:"聊天信息"},
// {user:"xie",msg:"聊天信息"},
// {user:"xie",msg:"聊天信息"},
// {user:"xie",msg:"聊天信息"},
// ]
var msgText=document.querySelector("#msgText");
var names=document.querySelector("#names");
var msgs=document.querySelector("#msgs");
var bn=document.querySelector("#bn");
bn.addEventListener("click",clickHandler);
function clickHandler(e) {
// 判断输入的姓名和留言信息是否为空
if(names.value.trim().length===0 || msgs.value.trim().length===0)return;
// type为0是发送消息
ajax({type:0,user:names.value,msg:msgs.value});
}
function ajax(data) {
var xhr=new XMLHttpRequest();
xhr.addEventListener("load",loadHandlder);
xhr.open("POST","http://192.168.53.213:3002");
xhr.send(encodeURIComponent(JSON.stringify(data)));
}
function loadHandlder(e) {
var arr=JSON.parse(decodeURIComponent(this.response));
// 将服务器返回的消息进行格式处理,方便显示
arr=arr.map(function (item) {
return item.user+":"+item.msg;
});
//每条消息换行显示
msgText.value=arr.join("\n");
//设置滚动条一直在底部
msgText.scrollTop=msgText.scrollHeight;
}
// 每16ms向后台获取一次消息
setInterval(getMsg,16);
// type为1是获取消息
function getMsg() {
ajax({type:1});
}
</script>
</body>
</html>
```