AJAX学习笔记2发送Post请求_biubiubiu0706的博客-CSDN博客
1.验证用户名是否可用
需求,用户输入用户名,失去焦点-->onblur失去焦点事件,发送AJAX POST请求,验证用户名是否可用
新建表


前端页面

WEB-INF下新建lib包引入依赖,要用JDBC


后端代码
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/checkusername")
public class AjaxRequestCheckName extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
PreparedStatement ps=null;
//System.setProperty("jdbc.drivers","com.mysql.cj.jdbc.Driver");
Class.forName("com.mysql.cj.jdbc.Driver");
conn= DriverManager.getConnection("xxx", "xxx", "xxx");
String sql="select id,name from t_user where name=?";
ps = conn.prepareStatement(sql);
ps.setString(1, username);
if(rs.next()){//如果只有一条的情况
} catch (SQLException e) {
} catch (SQLException e) {
} catch (SQLException e) {
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
writer.print("用户名存在,不可用");
public static void main(String[] args) {
//Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn= DriverManager.getConnection("xxx", "xxx", "xxx");
System.out.println(conn);

还可以在input获得焦点时候对

其实和input里面直接写 οnfοcus="xxx方法" 一样
2.用户点击按钮,发送AJAX请求 显示学院列表


测试

现在这种情况存在的问题是是后端代码又开始拼接HTML
能不能直接返回数据,剩下让前端处理 可以返回JSON 或者 XML
返回JSON数据
回顾JSON

也可以是这样

测试

上面是在JS代码中创建JSON对象,数组的访问
但是在后端返回前端时候,永远返回的都是字符串--->如何将JSON字符串转换为JSON对象呢

测试

下面后端就用JSON格式字符串的方式返回数据



下面去连接下数据库


前端

后端
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class AjaxRequestStudys extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
StringBuilder builder=new StringBuilder();
// builder.append(
"");// builder.append("
北京大兴区 | ");
");
// builder.append(
"");// builder.append("
北京海淀区 | ");
");
// builder.append("{'id':1,'name':'张三','age':20,'addr':'北京大兴区'},");
// builder.append("{'id':2,'name':'李四','age':22,'addr':'北京海淀区'}");
// builder.append("{\"id\":1,\"name\":\"张三\",\"age\":20,\"addr\":\"北京大兴区\"},");
// builder.append("{\"id\":2,\"name\":\"李四\",\"age\":22,\"addr\":\"北京海淀区\"}");
PreparedStatement ps=null;
//System.setProperty("jdbc.drivers","com.mysql.cj.jdbc.Driver");
Class.forName("com.mysql.cj.jdbc.Driver");
conn= DriverManager.getConnection("xxx", "xxx", "xxx");
String sql="select id,name,age,addr from t_stu";
ps = conn.prepareStatement(sql);
while(rs.next()){//如果只有一条的情况
String id = rs.getString("id");
String name = rs.getString("name");
String age = rs.getString("age");
String addr = rs.getString("addr");
//{"id":1,"name":"zhangsan","age":13,"addr":"北京大兴区"}
builder.append("{\"id\":"+id+",\"name\":\""+name+"\",\"age\":"+age+",\"addr\":\""+addr+"\"},");
jsonStr=builder.substring(0, builder.length()-1)+"]";
} catch (SQLException e) {
} catch (SQLException e) {
} catch (SQLException e) {
测试

这样拼接JSON太麻烦 使用fastjson对程序进行改进
引入jar包

不需要那么麻烦进行拼接
import com.alibaba.fastjson.JSON;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
public class AjaxRequestStudys extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
// StringBuilder builder=new StringBuilder();
List<Student> list=new ArrayList<>();
// builder.append(
"");// builder.append("
北京大兴区 | ");
");
// builder.append(
"");// builder.append("
北京海淀区 | ");
");
// builder.append("{'id':1,'name':'张三','age':20,'addr':'北京大兴区'},");
// builder.append("{'id':2,'name':'李四','age':22,'addr':'北京海淀区'}");
// builder.append("{\"id\":1,\"name\":\"张三\",\"age\":20,\"addr\":\"北京大兴区\"},");
// builder.append("{\"id\":2,\"name\":\"李四\",\"age\":22,\"addr\":\"北京海淀区\"}");
PreparedStatement ps=null;
//System.setProperty("jdbc.drivers","com.mysql.cj.jdbc.Driver");
Class.forName("com.mysql.cj.jdbc.Driver");
conn= DriverManager.getConnection("xxx", "xxx", "xxx");
String sql="select id,name,age,addr from t_stu";
ps = conn.prepareStatement(sql);
while(rs.next()){//如果只有一条的情况
String id = rs.getString("id");
String name = rs.getString("name");
String age = rs.getString("age");
String addr = rs.getString("addr");
//{"id":1,"name":"zhangsan","age":13,"addr":"北京大兴区"}
//builder.append("{\"id\":"+id+",\"name\":\""+name+"\",\"age\":"+age+",\"addr\":\""+addr+"\"},");
Student stu=new Student(id,name,age,addr);
//jsonStr=builder.substring(0, builder.length()-1)+"]";
s = JSON.toJSONString(list);
} catch (SQLException e) {
} catch (SQLException e) {
} catch (SQLException e) {
测试

下面用XML进行数据交互(XML体积大,现在相对用的少)
后端代码 注意下Content-Type
@WebServlet("/xmlstudys")
public class AjaxRequestXML extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/xml;charset=utf-8");
PrintWriter writer = resp.getWriter();
StringBuilder xml=new StringBuilder();
前端代码
<title>使用XML完成数据交互</title>
<script type="text/javascript">
window.onload=function(){
document.getElementById("btn").onclick=function(){
var xhr=new XMLHttpRequest();
xhr.onreadystatechange=function (){
//使用XMLHTTPRequest的responseXML属性,接收之后,自动封装成document对象(文档对象)
var xmlDoc=this.responseXML;
xhr.open("get","/ajax/xmlstudys",true)
//xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
<input type="button" value="显示学生列表" id="btn">
<table width="50%" border="1px">
测试

具体前端代码
<title>使用XML完成数据交互</title>
<script type="text/javascript">
window.onload=function(){
document.getElementById("btn").onclick=function(){
var xhr=new XMLHttpRequest();
xhr.onreadystatechange=function (){
//使用XMLHTTPRequest的responseXML属性,接收之后,自动封装成document对象(文档对象)
var xmlDoc=this.responseXML;
//获取所有<student>元素,返回了多个对象,是个数组
var students=xmlDoc.getElementsByTagName("student")
console.log(students[0].nodeName)
for(var i=0;i<students.length;i++){
html
+="" for(var j=0;j<s.length;j++){
console.log("id="+node.textContent)
html+="
"+node.textContent+" | " if(node.nodeName=="name"){
console.log("name="+node.textContent)
html+="
"+node.textContent+" | " if(node.nodeName=="age"){
console.log("age="+node.textContent)
html+="
"+node.textContent+" | " if(node.nodeName=="addr"){
console.log("addr="+node.textContent)
html+="
"+node.textContent+" | "
" document.getElementById("stubody").innerHTML=html
xhr.open("get","/ajax/xmlstudys",true)
//xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
<input type="button" value="显示学生列表" id="btn">
<table width="50%" border="1px">
