AJAX容易出错地方,错误处理
myajax.js
//创建路由器对象
const express=require('express');
//引入连接池模块
const pool=require('../pool.js');
//创建路由器对象
var router=express.Router();
//测试服务器接收ajax请求的接口
router.get("/ajaxDemo",(req,res)=>{
console.log(111);
res.send("第一个程序");
});
//2.测试带参数的get请求
router.get("/ajaxDemo1",(req,res)=>{
var $uname=req.query.uname;
var $upwd=req.query.upwd;
if(!$uname){
res.send("用户名没有接收到");
return;
}
if(!$upwd){
res.send("密码没有接收到");
return;
}
res.send("用户名为"+$uname+"密码为"+$upwd);
});
//3.get请求登录接口(应该用Post)
//http://127.0.0.1:8080/ajax/login_get?uname=yaya&upwd=123456
router.get("/login_get",(req,res)=>{
//获取请求中的数据
var $uname=req.query.uname;
var $upwd=req.query.upwd;
//验证数据正确的得到
if(!$uname){
res.send("没有获取到用户名称");
retrun;
};
if(!$upwd){
res.send("没有获取到用户密码");
return;
};
//使用连接池访问数据库
var sql="select * from xz_user where uname=? and upwd= ?";
pool.query(sql,[$uname,$upwd],(err,result)=>{
if(err){throw err };
if(result.length>0){
res.send("登录成功");
}else{
res.send("用户名或者密码错误");
};
});
});
//4.get接口请求登录
router.get("/login_post",(req,res)=>{
var $uname=req.query.uname;
var $upwd=req.query.upwd;
if(!$uname){
res.send("用户名不能为空");
return;
};
if($upwd==""){
res.send("密码不可以为空");
return;
};
var sql="select * from xz_user where uname=? and upwd=?";
pool.query(sql,[$uname,$upwd],(err,result)=>{
if(err) {throw err};
if(result.length>0){
res.send("登录成功");
}else{
res.send("用户名或密码错误");
};
});
});
//导出路由器对象
module.exports=router;
login_get_ajax.html
<body>
<input type="text" id="uname" >
<br><br>
<input type="text" id="upwd">
<br><br>
<button onclick="login()">登录</button>
<script>
function login(){
var u_uname=uname.value;
var u_upwd=upwd.value;
var xhr=new XMLHttpRequest();
xhr.onreadystatechange=function(){
if(xhr.readyState==4&&xhr.status==200){
var result=xhr.responseText;
alert(result);
};
};
var url="http://127.0.0.1:8080/ajax/login_post?uname="+u_uname+"&upwd="+u_upwd;
xhr.open("get",url,true);
xhr.send();
};
</script>
</body>
最新文章
- NGINX 配置 SSL 双向认证
- SharePoint Server 2016 IT Preview 先睹为快
- hive函数总结
- 一步步学敏捷开发:4、Scrum的3种角色
- kali实用链接
- px_ipc_name.c
- cocos2d-x 二进制文件的读写
- Windows下快速安装Xgboost(无需Git或者VS)
- 基于 Vue.js 的移动端组件库mint-ui实现无限滚动加载更多
- C++ 三大特性:封装、继承、多态性
- dtNavMeshQuery::findLocalNeighbourhood m_tinyNodePool->;getNode dtHashRef整数哈希 getPortalPoints dtOverlapPolyPoly2D
- C#创建、读写、增加、删除XML操作
- Mac 启动或者禁用翻盖自动开关机
- Delphi文件目录操作(转载)
- 深入研究 UCenter API For .NET
- 2013 C#单元测试
- FunDA(14)- 示范:并行运算,并行数据库读取 - parallel data loading
- 什么是mvc模式
- Integration Services 变量
- 【linux】Linux系统信息查看命令大全
热门文章
- SoringCloud(四) - 微信获取用户信息
- 华为开发者大会HDC2022:HMS Core 持续创新,与开发者共创美好数智生活
- Vue3 企业级优雅实战 - 组件库框架 - 1 搭建 pnpm monorepo
- 写一个shell,自动执行jmeter测试脚本
- 畅联新接入物联设备的情况:丰宝 智慧消防领域的 NB水压一体机、智能消防栓、NB液位一体机
- zk系列三:zookeeper实战之分布式锁实现
- 森林野火故事2.0:一眼看穿!使用 Panel 和 hvPlot 可视化 ⛵
- kubernetes数据持久化PV-PVC详解(一)
- day14 I/O流——序列化与反序列化 &; 计算机网络五层架构 &; TCP的建立连接与断开连接
- Django的manytomany字段