up:: jQuery事件处理方法
本篇博客主要介绍JQuery中对Ajax进行了大幅度的简化和封装的内容;
果然“懒惰”是程序员的提升效率的有效推动力!!!
一:简介
已经知道,JavaScript是一种浏览器脚本语言,Ajax是一种内嵌到浏览器中的一种技术;
JQuery是一个以JavaScript为基础的plugin,即JQuery可以简化JavaScript的开发;JQuery也可以简化Ajax的开发;
Ajax的流程包括创建XmlHttprequest对象、发送Ajax请求、处理服务器响应三个步骤;比较麻烦;JQuery也提供了对Ajax的支持;在JQuery中对Ajax进行了大幅度的简化和封装;
**即在引入jQuery文件后,在html文件的
标签中,就可以使用$.ajax(方法中书写一个json表达式,使用Ajax!!!之所以这么简单背后是jQuery的简化的“plugin”;二:基本介绍&简单示例:
为了使用jQuery需要先把jQuery文件复制进来:
基本内容和Ajax同步和异步的区别中类似,其中
NewsListServlet类:略微修改如下:
(1)后台处理后的数据向前台传的时候,需要转成JSON;这需要引入fastjson的jar包;
(2)这个Servlet并没有主动重定向至news.html;而是在这儿默默的等待,等待news.html的Ajax的XmlHttpServlet主动去请求访问这个servlet;
(3)这个Servlet通过,response.getWriter().println(newsJsonStr);将数据加入到了响应中去了;
(4)为了演示$.ajax()中data传递参数,servlet中设置了if()else if()判断语句;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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 com.alibaba.fastjson.JSON;
/**
* Servlet implementation class NewsListServlet
*/
@WebServlet("/news_list")
public class NewsListServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public NewsListServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String type = request.getParameter("t");// 新增
List<News> list = new ArrayList<News>();
if(type != null && type.equals("pypl")) {
list.add(new News("pypl标题1","2021-1-1","pypl","pypl内容1"));
list.add(new News("pypl标题2","2021-1-2","pypl","pypl内容2"));
list.add(new News("pypl标题3","2021-1-3","pypl","pypl内容3"));
}else if(type == null || type.equals("tiobe")) {
list.add(new News("标题1","2021-1-1","TIOBE","内容1"));
list.add(new News("标题2","2021-1-2","TIOBE","内容2"));
list.add(new News("标题3","2021-1-3","TIOBE","内容3"));
}
// 在Servlet处理后,对外进行字符串序列化的时候,一律将其转化为JSON;通过JSON,可以对数据进行有效的描述;
// 然后在前端的html中,再通过JavaScript自带的JSON处理方式,将从这儿发送过去的数据进行解析
// 将List转成JSON需要,引入fastjson包
String newsJsonStr = JSON.toJSONString(list);
System.out.println(newsJsonStr);
response.setContentType("text/html;charset=UTF-8"); // json中包含了中文
response.getWriter().println(newsJsonStr);
}
}
新增 jquery_news.html :
可以看到,(1)$.ajax()中的参数是一个json; (2)可以jQuery的.ajax()方法大幅简化了ajax的使用; (3) _ _ **由于jQuery正在逐渐被淘汰,其他如Vue、React等前端框架是否提供了ajax的封装和简化?**__ (4)下面的 ** __(function()){}:就绪函数是啥好像目前没必要深究,知道其在这儿的作用__ ** (在页面加载完毕后,执行这个function里面的代码)就行;
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-3.5.1.js" ></script>
<script>
$(function(){ // 创建一个页面就绪函数,其用途是在页面加载完毕后,执行这个function里面的代码;
$.ajax({
"url":"/ajax/news_list",
"type":"get",
"data":"t=tiobe",
"dataType":"json", // 在JavaScript中json的key可以不加引号,但是为了严谨和防止混乱,还是加上引号吧;
"success":function(json){
console.log(json);
for(var i=0;i<json.length;i++){
// append()的作用可以将append()中的html代码段追加到div的最后
$("#container").append("<h1>"+json[i].title+"</h1>");
}
}
})
});
</script>
</head>
<body>
<div id="container"></div>
</body>
</html>
效果:
三:$.ajax({})中的JSON表达式添加error项:
jquery_news.html文件中的$.ajax({})的JSON表达表达式添加error项;为了演示执行error内容的效果,故意将JSON表达式中的type改成了post,而Servlet中是get方式,所以会报错,会执行error的部分。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-3.5.1.js" ></script>
<script>
$(function(){ // 创建一个页面就绪函数,其用途是在页面加载完毕后,执行这个function里面的代码;
$.ajax({
"url":"/ajax/news_list",
"type":"post",
"data":"t=tiobe",
"dataType":"json", // 在JavaScript中json的key可以不加引号,但是为了严谨和防止混乱,还是加上引号吧;
"success":function(json){
console.log(json);
for(var i=0;i<json.length;i++){
// append()的作用可以将append()中的html代码段追加到div的最后
$("#container").append("<h1>"+json[i].title+"</h1>");
}
},
"error":function(xmlhttp,errorText){ // xmlhttp和errorText哪儿来的???
console.log(xmlhttp);
console.log(errorText);
if(xmlhttp.status == "405"){
alert("无效的请求方式");
}else if(xmlhttp.status == "404"){
alert("未找到url资源");
}else if(xmlhttp.status == "500"){
alert("服务器内部错误");
}else{
alert("其他异常");
}
}
})
});
</script>
</head>
<body>
<div id="container"></div>
</body>
</html>
此时执行的效果:
执行error部分,因为是请求方式错误,故错误码为405,所以会执行error中的alert(“无效的请求方式”);部分;
在上面示例中,针对不同的错误,只是简单打印了一些信息,,在实际中,会更加的复杂,会根据实际业务的不同,针对不同的错误情况作不同的处理。
data参数最好采用json的形式 :