【Ajax入门】实现页面的局部刷新,前后端交互少不了的技术

简介: 之前已经学习jQuery了,我们今天在jQuery的基础上继续学习Ajax。如果你不知道jQuery那么你可以先去看看本专栏的上一篇文章。

前言


之前已经学习jQuery了,我们今天在jQuery的基础上继续学习Ajax。如果你不知道jQuery那么你可以先去看看本专栏的上一篇博客。


传送门:【jQuery入门】为JavaScript而生,简化JavaScript操作的神技术


虽然我们是在jQuery的基础上学习Ajax,但是Ajax可是非常非常重要的,在以后的Web开发中会一直用到它的。


初识Ajax

首先要知道Ajax不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。


它的核心效果是在浏览器中不重载页面的情况(不刷新页面)与 Web 服务器交换数据,即在不需要刷新页面的情况下,就可以产生局部刷新的效果。


那我们该如何去使用Ajax呢?


Ajax使用流程


(1)创建XMLHttpRequest对象

(2)发送Ajax请求

(3)处理服务器


使用Ajax

创建XMLHttpRequest对象

XMLHttpRequest用于后台与服务器交换数据,是Ajax的核心


XMLHttpRequest并不是W3C的标准,不同浏览器的创建方式不同。


所以我们创建的时候需要根据浏览器来创建,一般创建格式如下:

var xmlhttp;
if(window.XMLHttpRequest) {
//IE+,Firefox,Chrome,Opera,Safari浏览器执行代码
  xmlhttp = new XMLHttpRequest();
}else{
//IE6,IE5浏览器执行代码
  xmlhttp = new ActiveXOBject("Microsoft.XMLHTTP");
}


发送Ajax

想要发送Ajax那么我们首先得创建一个Ajax请求,创建Ajax请求就得使用到我们之前创建的XMLHttpRequest对象xmlhttp了。


创建语法格式如下:


xmlhttp.open("GET/POST", "请求地址URL", true/false);


发送语法格式如下:


xmlhttp.send();


处理服务器响应

首先得知道:


(1)xmlhttp.onreadystatechange()事件用于监听Ajax的执行过程。

(2)xmlhttp.readyState属性说明XMLHttpRequest当前状态。


readyState值 说明

readyState=0 请求未初始化

readyState=1 服务器连接已建立

readyState=2 请求已被接收

readyState=3 请求正在处理

readyState=4 响应文本已被接收

(3)xmlhttp.status属性服务器响应码:200-成功, 404-未找到…


而我们处理服务器响应一般是要响应已被接收且服务器处理成功时才执行


一般语法格式为:

xmlhttp.onreadystatechange = function(){
//响应已被接收且服务器处理成功时才执行
  if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
  //获取响应体的文本
  var t = xmlhttp.responseText;
  //对服务器结构进行处理
  ...
  }
}



利用Ajax实现新闻列表

知道了基本如何使用Ajax之后我们就来具体练习一下,来实现一个新闻列表。


首先来创建一个新闻类

public class News {
  private String title;
  private String date;
  private String source;
  private String content;
  public News() {
  }
  public News(String title, String date, String source, String content) {
  super();
  this.title = title;
  this.date = date;
  this.source = source;
  this.content = content;
  }
  public String getTitle() {
  return title;
  }
  public void setTitle(String title) {
  this.title = title;
  }
  public String getDate() {
  return date;
  }
  public void setDate(String date) {
  this.date = date;
  }
  public String getSource() {
  return source;
  }
  public void setSource(String source) {
  this.source = source;
  }
  public String getContent() {
  return content;
  }
  public void setContent(String content) {
  this.content = content;
  }
}


在创建一个servlet对数据进行初始化和处理,我们最后是把这个列表信息转换为JSON格式作为响应传回去。

@WebServlet("/news_list")
public class NewsListServlet extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  List list = new ArrayList();//创建新闻列表
  list.add(new News("TIOBE:2019全球编程语言排行榜", "2019-5-1", "TIOBE", "..."));
  list.add(new News("TIOBE:2020全球编程语言排行榜", "2020-5-1", "TIOBE", "..."));
  list.add(new News("TIOBE:2021全球编程语言排行榜", "2021-5-1", "TIOBE", "..."));
  list.add(new News("TIOBE:2022全球编程语言排行榜", "2022-5-1", "TIOBE", "..."));
  String json = JSON.toJSONString(list);
  System.out.println(json);//控制台打印
  response.setContentType("text/html;charset=UTF-8");
  response.getWriter().println(json);
  }
}

然后在HTML页面中使用Ajax

Insert title here
    //1-创建对象
    var xmlhttp;
    if(window.XMLHttpRequest) {
    xmlhttp = new XMLHttpRequest();
    }else{
    xmlhttp = new ActiveXOBject("Microsoft.XMLHTTP");
    }
    //2-发送ajax请求
    xmlhttp.open("GET", "/ajax/news_list", true);
    xmlhttp.send();
    //3-处理响应
    xmlhttp.onreadystatechange = function(){
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      var text = xmlhttp.responseText;
      var json = JSON.parse(text);//把响应体的文本转换为JSON格式
      var html="";
      //动态处理每一条JSON
      for(var i = 0; i < json.length; i ++) {
      var news = json[i];
      html = html + "
" + news.title + "
";
      html = html + "
" + news.date + " " + news.source + "
";
      html = html + "
";
      }
      //为id为container的容器添加新创建的html页面
      document.getElementById("container").innerHTML = html;
    }
    }


 


输出:


微信图片_20220523183750.png

同步与异步

我们创建Ajax语法格式如下:


xmlhttp.open("GET/POST", "请求地址URL", true/false);


不知道大家有没有注意到在创建Ajax的时候的第三个参数。


前两个参数都比较容易理解分别是:请求方式与请求url。


但是这里的第三个参数是true或者false,大家可能理解不了。


这里的第三个参数是代表同步或异步的。


异步处理:就是通过事件触发到 ajax,请求服务器。在这个期间无论服务器有没有响应,客户端的其他代码一样可以运行。

同步处理:通过实践触发 ajax,请求服务器,在这个期间等待服务器处理请求, 在这个期间客户端不能做任何处理。当 ajax 执行完毕才会继续执行其他代码。


同步:提交Ajax请求->等待服务器处理->处理完毕返回(这个期间客户端浏览器不能干任何事)


异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕


同步需要等待返回结果才能继续,异步不必等待,一般只需要监听异步的结果。


举个简单的栗子:


同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。


异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到忙完才去吃饭。


这里要注意Ajax一般默认true为异步,我们使用的时候大多数情况下也是使用异步,即:true。


jQuery对Ajax的支持

之前学习了Ajax的使用流程为:


(1)创建XMLHttpRequest对象

(2)发送Ajax请求

(3)处理服务器


但是如果每次使用Ajax,都要经过这三步的话是不是太麻烦了。


于是jQuery对着Ajax的使用进行了简化封装。


接下来学习一下如何使用jQuery实现Ajax。


jQuery对Ajax操作实现了封装,最后只提供了$.ajax()方法来实现Ajax操作。


语法格式为:


$.ajax(options);


要提一下的是options是一个JSON类的对象。我们需要在这个JSON类对象中设置参数。


常用设置项


常用设置项 说明

url 发送请求地址

type 请求类型get或者post

data 向服务器传递的参数

dataType 服务器响应的数据类型(text/json/xml/html/jsonp/script)

success 接收响应时的处理函数

error 请求失败时的处理函数

练习强化

我们对之前是实现的servlet进行修改一下,然后使用jQuery来对Ajax进行实现。


修改之前的servlet,我们根据传入的参数来做出不同的响应,其他的与之前相同。

@WebServlet("/news_list")
public class NewsListServlet extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String type = request.getParameter("t");//接收参数
  List list = new ArrayList();
  if(type != null && type.equals("pypl")) {
    list.add(new News("PYPL:2019全球编程语言排行榜", "2019-5-1", "PYPL", "..."));
    list.add(new News("PYPL:2020全球编程语言排行榜", "2020-5-1", "PYPL", "..."));
    list.add(new News("PYPL:2021全球编程语言排行榜", "2021-5-1", "PYPL", "..."));
    list.add(new News("PYPL:2022全球编程语言排行榜", "2022-5-1", "PYPL", "..."));
  }else if(type == null || type.equals("tiobe")) {
    list.add(new News("TIOBE:2019全球编程语言排行榜", "2019-5-1", "TIOBE", "..."));
    list.add(new News("TIOBE:2020全球编程语言排行榜", "2020-5-1", "TIOBE", "..."));
    list.add(new News("TIOBE:2021全球编程语言排行榜", "2021-5-1", "TIOBE", "..."));
    list.add(new News("TIOBE:2022全球编程语言排行榜", "2022-5-1", "TIOBE", "..."));
  }
  String json = JSON.toJSONString(list);
  System.out.println(json);
  response.setContentType("text/html;charset=UTF-8");
  response.getWriter().println(json);
  }
}



使用jQuery来实现Ajax,这里参数我们设置为pypl,并且只打印出标题即可。

Insert title here
  $(function(){
  $.ajax({
    "url" : "/ajax/news_list",
    "type" : "get",
    "data" : {"t":"pypl"},//多个参数用逗号隔开即可
    "dataType" : "json",
    "success" : function(json){
    for(var i = 0; i < json.length; i ++) {
      $("#container").append("
" + json[i].title + "
");
    }
    },
    "error" : function(xmlhttp, errorText){
    if(xmlhttp.status == "405"){
      alert("无效的请求方式");
    }else if(xmlhttp.status == "404"){
      alert("URL资源不存在");
    }else if(xmlhttp.status == "500"){
      alert("服务器内部产生异常,请联系管理员");
    }else{
      alert("产生异常,请联系管理员!");
    }
    }
  })
  })



输出:

image.png


结语

内容虽然比较短,但是Ajax的重要性我们时不能忽视的,下去之后要多多练习,熟能生巧。


相关文章
|
4月前
|
JavaScript 前端开发 容器
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
48 0
|
1月前
|
XML 存储 前端开发
后端程序员的前后端交互核心-Ajax
后端程序员的前后端交互核心-Ajax
45 6
后端程序员的前后端交互核心-Ajax
|
4月前
|
XML 前端开发 JavaScript
使用 AJAX 提升网页数据的动态交互
使用 AJAX 提升网页数据的动态交互
|
1月前
|
前端开发 JavaScript Java
Ajax进行异步交互:提升Java Web应用的用户体验
Ajax 技术允许在不重载整个页面的情况下与服务器异步交换数据,通过局部更新页面内容,极大提升了 Java Web 应用的响应速度和用户体验。本文介绍 Ajax 的基本原理及其实现方式,包括使用 XMLHttpRequest 对象发送请求、处理响应数据,并在 Java Web 应用中集成 Ajax。此外,还探讨了 Ajax 如何通过减少页面刷新、实时数据更新等功能改善用户体验。
44 3
|
23天前
|
JSON 前端开发 JavaScript
Django入门到放弃之ajax
Django入门到放弃之ajax
|
29天前
|
XML JSON 前端开发
JSON与AJAX:网页交互的利器
JSON与AJAX:网页交互的利器
24 0
|
2月前
|
前端开发 API UED
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
【7月更文挑战第15天】Python后端(Django/Flask)与前端通过AJAX或Fetch API实现异步交互,提升Web应用体验。Python提供强大的后端支持,AJAX用于不刷新页面的数据交换,Fetch API作为现代标准,基于Promise简化HTTP请求。结合两者,构建高效、流畅的交互系统,优化响应速度和用户体验,开启Web开发新篇章。
54 5
|
2月前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
【7月更文挑战第13天】在Web开发中,AJAX和Fetch API是实现页面无刷新数据交换的关键。在Flask博客系统中,通过创建获取评论的GET路由,我们可以展示使用AJAX和Fetch API的前端实现。AJAX通过XMLHttpRequest发送请求,处理响应并在成功时更新DOM。Fetch API则使用Promise简化异步操作,代码更现代。这两个工具都能实现不刷新页面查看评论,Fetch API的语法更简洁,错误处理更直观。掌握这些技巧能提升Python Web项目的用户体验和开发效率。
50 7
|
2月前
|
前端开发 JavaScript API
惊天揭秘!AJAX与Fetch API如何让你的前后端交互秒变‘神级操作’!
【7月更文挑战第15天】在Web开发中,AJAX和Fetch API革新了前后端交互,告别了表单提交带来的页面刷新。AJAX利用XMLHttpRequest实现部分页面更新,开启无刷新时代;Fetch API作为现代替代,以其简洁和Promise支持简化异步操作。从AJAX的先驱地位到Fetch API的进化,两者提升了Web应用的性能和用户体验,成为现代开发的必备技能。
39 2
|
2月前
|
前端开发 API 开发者
从零到精通,AJAX与Fetch API让你的Python Web前后端交互无所不能!
【7月更文挑战第14天】在Web开发中,AJAX和Fetch API扮演着关键角色,用于前后端异步通信。AJAX通过XMLHttpRequest实现页面局部更新,但回调模式和复杂API有一定局限。Fetch API作为现代替代,利用Promise简化异步处理,提供更丰富功能和错误处理。Python后端如Flask、Django支持这些交互,助力构建高性能应用。从AJAX到Fetch API的进步,结合Python,提升了开发效率和用户体验。
25 0