欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > Ajax相关

Ajax相关

2025/7/2 5:44:09 来源:https://blog.csdn.net/qq_59099003/article/details/145813698  浏览:    关键词:Ajax相关

Ajax

1. 什么是Ajax

客户端发送请求后,我们的服务端响应一个页面或地址

而ajax响应的不再是地址或网页,而是**一个数据**

Ajax技术的产生:Asynchronous JavaScript and XML

允许浏览器与服务器通信而无须刷新当前页面的技术都叫Ajax

  • Ajax的流程

使用Ajax必须具备:

  1. 通过事件触发向服务器发送请求
  2. 服务器响应的一定是数据,不再是地址或网页
  3. 具备的条件:js功底和css功底

2. 如何使用ajax

  • 两种实现方法:
  1. 可以通过js完成原生的ajax请求。JavaScript
  2. 可以使用jquery实现ajax请求——别人封装原生js发送的ajax

ajax请求:常用方法如下

$.get(url,[data],[callback],[type]);

$post(url,[data],[callback],[type]);

参数意义:

  1. url:服务器的地址
  2. data:发送ajax请求时携带的数据
  3. callback:回调函数——当服务器响应时会触发该函数
  4. type:服务器响应的数据类型。默认text。而我们一般需要json
  5. :里面的参数表示可有可无

实现步骤:

1. 引入jquery文件

在所需的jsp文件的html——的head里引入jquery文件,同前端所学一样

<head><title>$Title$</title><%--引入jquery文件--%><script src="js/jquery-3.4.1.js"></script></head>

2. 通过事件向服务器发送请求

给响应按钮添加相应事件,如点击事件,在事件中发送ajax请求

  <body><button onclick="MyAjax()">点击时间</button><%--获取当前时间--%><%=new Date()%>><span id="r"></span></body>

在点击事件中定义ajax服务器的地址,发送请求时所携带的数据,回调函数等

<script>
<%--/MyServlet:服务器地址{name:"zmq",age:15}:发送请求时携带的值回调函数:当服务器响应后触发的函数msg:服务器响应后的数据赋值给该变量
--%>function MyAjax(){$.get("/MyServlet",{name:"zmq",age:15},function (msg){//依据选择器将msg的值传入到相应位置$("#r").html(msg);})}
</script>

3. 服务器端的相关业务操作

注解:用于注册servlet

@WebServlet(urlPatterns = "/MyServlet")

继承HttpServlet类,重写service方法

因为前面发送请求时携带了参数,所以——接收参数

 //获取数据String name = req.getParameter("name");String age = req.getParameter("age");

因为java代码中没有内置输出对象,所以——需要先获取输出对象

因为是响应的,所以用resp

//获取输出对象PrintWriter our = resp.getWriter();

通过输出对象响应数据,将响应的数据传入赋值给msg

//响应数据our.print("ajax----------响应");

最后,刷新out对象和关闭out对象

  //刷新页面our.flush();//关闭响应our.close();
  • 整体代码
@WebServlet(urlPatterns = "/MyServlet")
public class MyServlet extends HttpServlet {//重写service方法@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置编码格式req.setCharacterEncoding("utf-8");//请求的编码格式resp.setCharacterEncoding("utf-8");//响应的编码格式//获取数据String name = req.getParameter("name");String age = req.getParameter("age");//获取输出对象PrintWriter our = resp.getWriter();//响应数据our.print("ajax----------响应");//刷新页面our.flush();//关闭响应our.close();}
}

3.服务器响应的数据类型

text:文本类型,默认就是文本类型

json :json对象类型,非常重要

xml :xml类型,可扩展标记语言,一般用于人工智能、微信支付【了解】

4. json以及格式

4.1 what

JSON :JavaScript Object Notation 一种简单的数据格式

是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包

JSON规则:对象是一个无需的" '名称/值’对"集合。一个对象已"{“(左括号)开始,”}“(右括号)结束。每个"名称"后跟一个”:“(冒号);”'名称/值’对"之间使用","(逗号)分隔

JSON对象:

{"key":value,"key":value...}

JSON集合:

[{"key":value,"key":value...},{"key":value,"key":value...},...{"key":value,"key":value...}
]

规则如下:

① 映射用冒号(“:”)表示。名称:值

② 并列的数据之间用逗号(“,”)分割。名称1:值1,名称2:值2

③ 映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}

④ 并列数据的集合(对象)用大括号(“[]”)表示

[

​ {名称1:值1,名称2:值2},

​ {名称1:值1,名称2:值2}

]

⑤ 元素值可具有的类型:string、number、object、array、true、false、null

⑥ 调用json对象中数据:对象名.key

    <script>//json对象,String,number,boolean,Object,nullvar p={"name":"张三","age":18};// alert(p.name)//复杂的jsonvar p2={"name":"李四","age":22,"address":{"province":"河南省","city":"郑州市","street":"杨金街道"}};// alert(p2.address.street)//json集合对象var ps=[{"name":"李四1","age":22,"address":{"province":"河南省1","city":"郑州市1","street":"杨金街道1"}},{"name":"李四2","age":221,"address":{"province":"河南省2","city":"郑州市2","street":"杨金街道2"}},{"name":"李四3","age":222,"address":{"province":"河南省3","city":"郑州市3","street":"杨金街道3"}}]//循环for(var i=0;i<ps.length;i++){alert(ps[i].name)}</script>

4.2 服务器如何响应json数据

就是把拿到的java对象,转化为json数据响应给前端

第一种,手动把java对象转化为json对象【不用】

后端

@WebServlet(urlPatterns = "/AjaxServlet")
public class AjaxServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//接受参数String name = req.getParameter("name");String age = req.getParameter("age");//业务操作---System.out.println("name~~~~~~~~~~"+name+";age~~~~~~~~~~~"+age);//获取输出对象PrintWriter out = resp.getWriter();User user=new User(1,"xueyang",18);//把java对象转化为json字符串数据---手动转化  学生: id,name,sex,age,hiredate,address,banji....String json="{\"id\":"+user.getId()+",\"name\":\""+user.getName()+"\",\"age\":"+user.getAge()+"}";System.out.println(json);//响应数据---out.print(json);//刷新和关闭out对象out.flush();out.close();}
}

前端

 <script>function myclick() {// AjaxServlet服务器的地址// {key:value,key:value.....}// 回调函数: 当服务器响应后触发的函数  msg:服务器响应的数据赋值给该变量$.get("/AjaxServlet",{name:"zs",age:25},function(msg){ //msg={\"id\":"+user.getId()+",\"name\":\""+user.getName()+"\",\"age\":"+user.getAge()+"};//alert(msg.name)//服务器响应的是一个json格式的字符串//手动把json格式的字符串转化为json对象// var jsonObject=JSON.parse(msg);// alert(jsonObject.name+";"+jsonObject.age)// $("#r").html(msg)alert(msg.name)},"json");}</script>

第二种:第三方工具——阿里巴巴fastjson

① 引入fastjson依赖

② 后端代码

创建一个Java对象

User user=new User(1,zmq,18);

把Java对象转化为json字符串数据——通过fastjson工具类

String json=JSON.toJSONString(user);

完整代码

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");//请求的编码设置resp.setCharacterEncoding("utf-8");//设置响应的编码//接受参数String name = req.getParameter("name");String age = req.getParameter("age");//业务操作---System.out.println("name~~~~~~~~~~"+name+";age~~~~~~~~~~~"+age);//获取输出对象PrintWriter out = resp.getWriter();User user=new User(1,"薛阳",18);//把java对象转化为json字符串数据---手动转化  学生: id,name,sex,age,hiredate,address,banji....
//        String json="{\"id\":"+user.getId()+",\"name\":\""+user.getName()+"\",\"age\":"+user.getAge()+"}";
//        System.out.println(json);//把java对象转化为json字符串数据---fastjson工具类String json = JSON.toJSONString(user);//响应数据---out.print(json);//刷新和关闭out对象out.flush();out.close();}

③ 前端代码

回调函数中type设置为json类型

<script>function myclick(){$.get("/AjaxServlet",{name:"zs",age:25},funcion(msg){alert(msg.name) },"json");}
</script>

5.通过使用Ajax实现登录

  1. type类型改为button,不再使用submit提交表单数据,而是普通的普通按钮,添加点击事件

     <input type="button" value="登录" onclick="loginCheck()"/>
  2. 在点击事件function中,通过选择器获取到input框中的值。通过get方法中的[data]将数据携带

    function loginCheck(){//依据id选择器获取值var username = $("#username").val();var userpassword = $("#userpassword").val();//ajax请求,携带通过id选择器获取到的数据username和userpassword$.get("/LoginServlet",{"name":username,"password":userpassword},function (msg){if(msg==="true"){alert("登陆成功!");location.href="success.jsp";}else{alert("账号或密码错误");}});}
  3. 在LoginServlet中,通过req.getParamether获取携带的数据,封装到session会话中。调用方法查询,如果返回值为null,返回false给msg;如果不等于null,返回true给msg。都是通过创建的out响应对象调用print进行返回。

    //获取数据String name = req.getParameter("name");String password = req.getParameter("password");//通过获取到的数据调用userdao中的方法进行判断UserDao userDao=new UserDao();User user = userDao.selectByNameAndPassword(name, password);//获取输出对象PrintWriter out = resp.getWriter();//对user进行判断if(user!=null){//获取session对象,并将用户信息封装到会话中HttpSession session = req.getSession();session.setAttribute("user",user);//输出布尔值trueout.print(true);}else {//输出布尔值falseout.print(false);}
  4. 刷新,关闭

            //刷新out.flush();//关闭out对象out.close();

总结

失焦事件:onblur()

json中"key"为字符串类型,不加"",表示jaon中的类对象

onload:页面加载完执行事件【js】

【jquery】:$(function(){})

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词