目录
一、ajax
二、准备阶段
三、语法
案例一:使用jQuery的ajax即时判断用户名是否可用
案例二:使用jQuery的ajax+json实现自动补全功能
配置404页面
ajax:只刷新局部页面的技术
技术核心:发送请求到服务器并获得返回结果
异步:发送请求后不等返回结果,由回调函数处理结果
1、jquery-3.3.1.js
2、JSON需要的jar包:fastjson-1.2.47.jar
3、eclipse
4、将jQuery和jar包全部导入到项目中
$.ajax({
url:"vname.do",//请求地址 servlet
data:{iname:name},//"iname="+name, 请求参数(传递到服务器)
type:"post",//请求参数
dataType:"text",//预期服务器可能返回的数据类型
success:function(data){//成功的回调函数 data是服务器返回的数据
//alert(data);
$("#aa").html(data);//innerHTML 给span赋值
},
error:function(){//失败的回调函数
alert("有误");
}
});
// url data success
$.post("vname.do", {iname:name}, function(data) {
$("#aa").html(data);
//[dataType]
}, "text")
html代码:
使用jQuery的ajax即时判断用户名是否可用
用户名:
servlet代码:
public class VNameServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置编码方式
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html; charset=UTF-8");
//获取out
PrintWriter out=resp.getWriter();
//接收参数
String name=req.getParameter("iname");
//调用biz层 select * from 用户表 where uname = ? 返回boolean
String str = "该用户名可用";//可用
//假设法:假设数据表已经存在admin这个用户
if("admin".equals(name)) {
str = "该用户名已存在";
}
//把响应输送到客户端
out.print(str);
out.flush();//刷新
out.close();//关闭
}
}
写好servlet之后一定要在web.xml进行配置映射
jQuery代码:
$(function(){
//给文本框添加失焦事件
$("#sname").blur(function(){
//获取文本框 的值
var name=$("#sname").val();
//把name值传到vname.do中
$.post("vname.do", {iname:name}, function(data) {
//赋值
$("#aa").html(data);
})
});
})
将servlet返回回来的值赋给div
运行:
用户名可用:
当用户名为admin时:
html代码:
使用jQuery的ajax+json实现自动补全功能
servlet代码:
public class AutoFillServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置编码方式
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html; charset=UTF-8");
//获取out
PrintWriter out=resp.getWriter();
//接收参数
String name=req.getParameter("iname");
//调用查询全部的方法 biz层 里氏替换原则
UserDao ud=new UserDao();
//用户集合 模糊查询的方法
List ls=ud.getAll(name);
//怎么将集合--->字符串
/**
* 模拟json格式: 边遍历边拼接
* 对象:{"uname":"xx1","uage":20}
* 数组:[]
* 对象数组:[{"uname":"xx1","uage":20},{"uname":"xx2","uage":21}]
*/
/*StringBuffer sb=new StringBuffer();
sb.append("[");
//遍历集合
for (User u : ls) {
sb.append("{");
sb.append("\"uuid\":"+u.getUuid()+",");
sb.append("\"uname\":\""+u.getUname()+"\",");
sb.append("\"usex\":\""+u.getUsex()+"\",");
sb.append("\"uage\":"+u.getUage());
sb.append("},");
}
sb.append("]");*/
//将集合--->String
String str=JSON.toJSONString(ls);
//把响应输送到客户端
out.print(str);
out.flush();//刷新
out.close();//关闭
}
}
jQuery代码:
$(function(){
//让div隐藏
$("#aa").hide();
//给文本框添加失焦事件
$("#sname").keyup(function(){//键盘事件
//让div显示
$("#aa").show();
//获取文本框 的值
var name=$("#sname").val();
//$.post() url,data,success,[dataType]
$.post("autoFill.do", {iname:name}, function(data) {
//json格式的对象数组的字符串
//将json格式的对象数组字符串-->js的对象数组
//var ss=eval(data);//js方式
var ss=$.parseJSON(data);//jQuery方式
var sb="";
//遍历集合
$.each(ss,function(i,u){//下标,用户
sb+="- "+u.uname+"
";
});
sb+="
";
//给div赋值
$("#aa").html(sb);
})
});
})
function myf(name) {
//给文本框赋值
$("#sname").val(name);
//让div隐藏
$("#aa").hide();
}
运行:
第一步:找到web.xml
第二步:在之前配置以下代码:
404
/error.jsp //要跳转的404界面