原生Ajax,前后端代码

前端

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			#show{
				margin: 10px;
			}
			#show>table{
				border: 1px solid red;
				border-collapse: collapse;
			}
			#show>table th,
			#show>table td
			{
				border: 1px solid red;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<div id="entry">
				<div>
					<label>
						姓名:<input type="text" id="user"/>
					</label>
					<label>
						年龄:<input type="number" id="age"/>
					</label>
				</div>
				<div>
					<button type="button" id="addGet">addGet</button>
					<button type="button" id="addPost">addPost</button>
				</div>
			</div>
			<div id="show">
				<table>
					<thead>
						<tr>
							<th>序号</th>
							<th>ID</th>
							<th>姓名</th>
							<th>年龄</th>
							<th>添加时间</th>
							<th>操作</th>
						</tr>
					</thead>
					<tbody>
						<!-- <tr>
							<td>1</td>
							<td>123</td>
							<td>kky</td>
							<td>18</td>
							<td>2021-12-02 10:55:01</td>
							<td>
								<button type="button">getDel 删除</button>
								<button type="button">postDel 删除</button>
							</td>
						</tr> -->
					</tbody>
				</table>
			</div>
		</div>
		<script>
			/* 
				KKY P3 学员信息系统(kkyP3)
			
			根据业务决定
			
			 1网站功能:
			 1. 添加 两种方式GET和POST
			 2. 获取 get方式 和 POST ,渲染到一个表格中
			 3. 删除 两种方式 GET 和 POST
			 
			 2.字段
			 姓名 user
			 年龄 age
			 
			 
			 前后端商量出来的
			 3.接口文档
				接口1 添加 addGet GET /addGet 			user,age必填 返回{code:200,msg:"addGet 添加成功"}
				接口1 添加 addPost POST /addPost 		user,age必填 返回{code:200,msg:"addPost 添加成功"}
				
				接口2 获取 getData GET /getData 无 		返回{code:200,msg:"getData 获取成功",data:data} ,data=[{user:"kky",age:18}],user,age
				接口4 获取 postData POST /postData 无 	返回{code:200,msg:"postData 获取成功",data:data} ,data=[{user:"kky",age:18}],user,age
				
				接口5 删除 getDel GET /getDel  id 必填 	返回{code:200,msg:"getDel 删除成功"}
				接口6 删除 postDel POST /postDel  id 必填 	返回{code:200,msg:"getDel 删除成功"}
			 
			 
			 */
			//全局
			
			
			
			
			;(function(){
					var user = document.getElementById("user");
					var age = document.getElementById("age");
					
					var addGet = document.getElementById("addGet");
					var addPost = document.getElementById("addPost");
					
					
					
					//调用getDataAjax
					var getDataUrl="http://127.0.0.1:85/getData";
					getDataAjax(getDataUrl);
					
					//调用postDataAjax
					var postDataUrl="http://127.0.0.1:85/postData";
					// postDataAjax(postDataUrl)
					
					
					//通过get方式添加
					addGet.onclick=function(){
						var userV=user.value;
						var ageV=age.value;
						if(userV&&ageV){
							//序列化 数据
							var data="user="+userV+"&age="+ageV;
							// var data=`user=${userV}&age=${ageV}`;
							
							//接口地址+数据
							var url="http://127.0.0.1:85/addGet?"+data;
							
							//调用 addGetAjax
							addGetAjax(url);
							
							
						}else{
							alert("姓名或年龄不能为空");
						}
					}
					
					//通过post方式添加
					addPost.onclick=function(){
						var userV=user.value;
						var ageV=age.value;
						if(userV&&ageV){
							var data="user="+userV+"&age="+ageV;
							var url="http://127.0.0.1:85/addPost";
							
							//调用addPostAjax
							addPostAjax(url,data);
							
						}else{
							alert("姓名或年龄不能为空");
						}
					}
					
			}());
			
			
			
			//通过ajax get 方式添加数据
			function addGetAjax(url){
				var xhr=new XMLHttpRequest();
				xhr.open("get",url);
				xhr.send();
				xhr.onreadystatechange=function(){
					if(xhr.readyState==4&&xhr.status==200){
						var str=xhr.responseText;
						// console.log("str:",str);
						var strObj=JSON.parse(str);
						// console.log("strObj:",strObj);
						if(strObj.code==2021){
							// alert(strObj.msg);
							
							
							//调用getDataAjax
							var getDataUrl="http://127.0.0.1:85/getData";
							getDataAjax(getDataUrl);
							
						}
					}
				}
			}		
			
			//通过ajax post 方式添加数据
			function addPostAjax(url,data){
				var xhr=new XMLHttpRequest();
				xhr.open("post",url);
				xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
				xhr.send(data);
				xhr.onreadystatechange=function(){
					if(xhr.readyState==4&&xhr.status==200){
						var str=xhr.responseText;
						// console.log("str:",str);
						var strObj=JSON.parse(str);
						// console.log("strObj:",strObj);
						if(strObj.code==2021){
							// alert(strObj.msg);
							
							
							
							//调用postDataAjax
							var postDataUrl="http://127.0.0.1:85/postData";
							postDataAjax(postDataUrl)
						}
					}
				}
			}
			
			//通过get方式获取数据
			function getDataAjax(url){
				var xhr=new XMLHttpRequest();
				xhr.open("get",url);
				xhr.send();
				xhr.onreadystatechange=function(){
					if(xhr.readyState==4&&xhr.status==200){
						var str=xhr.responseText;
						// console.log('str:',str);
						var obj=JSON.parse(str);
						// console.log("obj:",obj);
						var arr=obj.data;
						// console.clear();//清除之前控制台所有的打印信息
						// console.log("getData arr:",arr);
						//调用showPage(arr);渲染页面
						showPage(arr);
					}
				}
			}
			
			//通过post方式获取数据
			function postDataAjax(url){
				var xhr=new XMLHttpRequest();
				xhr.open("post",url);
				xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
				xhr.send();
				xhr.onreadystatechange=function(){
					if(xhr.readyState==4&&xhr.status==200){
						var str=xhr.responseText;
						// console.log('str:',str);
						var obj=JSON.parse(str);
						// console.log("obj:",obj);
						var arr=obj.data;
						// console.clear();//清除之前控制台所有的打印信息
						// console.log("pstData arr:",arr);
						
						//调用showPage(arr);渲染页面
						showPage(arr);
					}
				}
			}
			
			
			
			//渲染页面
			function showPage(arr){
				var tbody=document.querySelector("#show>table>tbody");
				var trs="";
				for(var i=0;i<arr.length;i++){
					trs+=`
						<tr>
							<td>${i+1}</td>
							<td>${arr[i].id}</td>
							<td>${arr[i].user}</td>
							<td>${arr[i].age}</td>
							<td>${timeFun(arr[i].time)}</td>
							<td>
								<button type="button" onclick=getDel('${arr[i].id}')>getDel 删除</button>
								<button type="button" onclick=postDel('${arr[i].id}')>postDel 删除</button>
							</td>
						</tr>
					`;
				}
				tbody.innerHTML=trs;
			}
			
			//通过get方式将id传给后端,后端将根据id删除指定数据
			function getDel(id){
				// console.log("getDel id:",id);
				var url="http://127.0.0.1:85/getDel?id="+id;
				var xhr=new XMLHttpRequest();
				xhr.open("get",url);
				xhr.send();
				xhr.onreadystatechange=function(){
					if(xhr.readyState==4&&xhr.status==200){
						var str=xhr.responseText;
						// console.log("str:",str);
						var strObj=JSON.parse(str);
						// console.log("strObj:",strObj);
						if(strObj.code==2021){
							// alert(strObj.msg);
							
							
							//调用getDataAjax
							var getDataUrl="http://127.0.0.1:85/getData";
							getDataAjax(getDataUrl);
							
						}
					}
				}
			}
			
			
			//通过post方式将id传给后端,后端将根据id删除指定数据
			function postDel(id){
				// console.log("postDel id:",id);
				var url="http://127.0.0.1:85/postDel";
				var xhr=new XMLHttpRequest();
				xhr.open("post",url);
				xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
				xhr.send("id="+id);
				xhr.onreadystatechange=function(){
					if(xhr.readyState==4&&xhr.status==200){
						var str=xhr.responseText;
						console.log("str:",str);
						var strObj=JSON.parse(str);
						// console.log("strObj:",strObj);
						if(strObj.code==2021){
							// alert(strObj.msg);
							
							
							
							//调用postDataAjax
							var postDataUrl="http://127.0.0.1:85/postData";
							postDataAjax(postDataUrl)
						}
					}
				}
			}
			
			function timeFun(time){
				var d=new Date(time);
				var year=d.getFullYear();
				var month=d.getMonth()+1;
				var date=d.getDate();
				
				var hours=d.getHours();
				var minustes=d.getMinutes();
				var seconds=d.getSeconds();
				
				return year+"-"+bu0(month)+"-"+bu0(date)+" "+bu0(hours)+":"+bu0(minustes)+":"+bu0(seconds);
			}
			
			function bu0(n){
				return n>10?n:('0'+n);
			}
		</script>
	</body>
</html>

后端

var http = require('http');
var url = require('url');
var fs = require('fs');
var querystring = require('querystring');

const PROT = 85;
var filePath="./data/data01.json";

var app = http.createServer(function(req,res){
    res.writeHead(200,{
        "content-type":"text/html;charset=utf-8",
        "Access-Control-Allow-Origin":"*",解决跨域问题
        "Access-Control-Allow-Methods": "POST,GET",
        'Access-Control-Allow-Headers':'Content-type',
    });
    // res.end("0后端服务创建成功");
    var pathname = url.parse(req.url).pathname;
    if(pathname=="/addGet"){
        var addGetObj=url.parse(req.url,true).query;
        console.log("01 addGet 前后端通信成功 addGetObj:",addGetObj);
        
        addReadWriteFile(filePath,addGetObj,function(){
            res.end(JSON.stringify({code:2021,msg:"addGet 添加成功"}));
        });

        
    }else if(pathname=="/addPost"){
        var str1="";
        req.on("data",function(s){
            str1+=s;
        });
        req.on("end",function(){
            var addPostObj=querystring.parse(str1);
            // console.log("02 addPost 前后端通信成功 addPostObj:",addPostObj);
            
            addReadWriteFile(filePath,addPostObj,function(){
                res.end(JSON.stringify({code:2021,msg:"addPost 添加成功"}));
            });

        })

    }else if(pathname=="/getData"){
        fs.readFile(filePath,'utf-8',function(err,data){
            if(err){
                console.log("getData 读取失败:\n",err);
            }else{
                // console.log("data:",data,typeof data);

                var obj1={code:2021,msg:"getData 获取数据成功",data:data};
                // res.end(JSON.stringify(obj1));

                var arr=JSON.parse(data);
                var obj2={code:2021,msg:"getData 获取数据成功",data:arr};
               
                res.end(JSON.stringify(obj2));
            }
        })
    }else if(pathname=="/postData"){
        fs.readFile(filePath,'utf-8',function(err,data){
            if(err){
                console.log("postData 读取失败:\n",err);
            }else{
                console.log("data:",data,typeof data);

                var arr=JSON.parse(data);
                var obj2={code:2021,msg:"postData 获取数据成功",data:arr};
               
                res.end(JSON.stringify(obj2));
            }
        })
    }else if(pathname=="/getDel"){
        var getDelObj=url.parse(req.url,true).query;
        console.log("01 getDel 前后端通信成功 getDelObj:",getDelObj);
        
        delReadWriteFile(filePath,getDelObj.id,function(){
            res.end(JSON.stringify({code:2021,msg:"getDel 删除成功"}));
        })

    }else if(pathname=="/postDel"){
        // console.log("1我是postDel,我执行了吗?");
        var str2="";
        req.on("data",function(s){
            str2+=s;
        });
        // console.log("2我是postDel,我执行了吗?");
        req.on("end",function(){
            // console.log("3我是postDel,我执行了吗?");
            var postDelObj=querystring.parse(str2);
            // console.log("01 postDel 前后端通信成功 postDelObj:",postDelObj);
        
            delReadWriteFile(filePath,postDelObj.id,function(){
                res.end(JSON.stringify({code:2021,msg:"postDel 删除成功"}));
            })
        })

    }else{
        res.end("2.接口不存在或空页面");
    }

});


app.listen(PROT,function(){
    console.log("服务创建成功 http://127.0.0.1:"+PROT);
});


//将前台发送的数据,添加到data02.json
function addReadWriteFile(filePath,obj,cb){
    // console.log("99999obj:",obj);
    fs.readFile(filePath,'utf-8',function(err,data){
        if(err){
            console.log("读取失败:\n",err);
        }else{
            console.log("data:",data);

            var arr=JSON.parse(data);
            obj.id=+new Date();
            obj.time=+new Date();
            arr.push(obj);
            var str=JSON.stringify(arr);

            fs.writeFile(filePath,str,function(err){
                if(err){
                    console.log("写入失败:\n",err);
                }else{
                    console.log("写入成功");
                    cb();
                }
            })

        }

    });
}

//根据前台发送的id,将data02.json中特定数据删除
function delReadWriteFile(filePath,id,cb){
    //
    fs.readFile(filePath,'utf-8',function(err,data){
        if(err){
            console.log("读取失败:\n",err);
        }else{
            console.log("data:",data);

            var arr=JSON.parse(data);
            console.log("delReadWriteFilearr:",arr);

            for(var i=0;i<arr.length;i++){
                if(arr[i].id==id){
                    arr.splice(i,1);
                    break;
                }
            }

            var str=JSON.stringify(arr);

            fs.writeFile(filePath,str,function(err){
                if(err){
                    console.log("写入失败:\n",err);
                }else{
                    console.log("写入成功");
                    cb();
                }
            })

        }

    });
    //
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值