【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的重要性我们时不能忽视的,下去之后要多多练习,熟能生巧。


相关文章
|
1月前
|
JavaScript 前端开发 容器
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
21 0
|
1月前
|
前端开发 JavaScript Java
使用Ajax进行异步交互:提升Java Web应用的用户体验
【4月更文挑战第3天】Ajax技术在Web开发中提升UX,通过与服务器异步交互实现页面局部更新,无需完整刷新。核心组件包括XMLHttpRequest、JavaScript、HTML/CSS及服务器端脚本。在Java Web应用中,可使用原生JavaScript或框架如jQuery、AngularJS实现Ajax请求。Ajax减少页面刷新,实现实时数据更新,即时表单验证和动态UI,显著改善用户体验,是现代Web开发不可或缺的一部分。
|
2月前
|
XML 前端开发 JavaScript
AJAX 前端开发利器:实现网页动态更新的核心技术
**AJAX** 允许网页在不刷新的情况下更新内容,实现异步与服务器交换数据。通过JavaScript的XMLHttpRequest对象,可发送和接收数据。当用户触发事件(如点击),函数向服务器发送GET请求,服务器响应后更新指定HTML部分。AJAX并非编程语言,而是利用浏览器内置对象、JavaScript和DOM技术。核心是XMLHttpRequest对象,它有多种方法(如`open()`和`send()`)和属性(如`onreadystatechange`、`readyState`和`status`)来处理请求和响应。
62 2
AJAX 前端开发利器:实现网页动态更新的核心技术
|
3月前
|
设计模式 前端开发 JavaScript
Ajax技术【Ajax 实战】(二)-全面详解(学习总结---从入门到深化)
Ajax技术【Ajax 实战】(二)-全面详解(学习总结---从入门到深化)
23 0
|
3月前
|
XML JSON 前端开发
JavaWeb----Ajax技术
JavaWeb----Ajax技术
58 0
|
4月前
|
前端开发 JavaScript API
Ajax技术的秘密揭秘:异步传输,高效交互
Ajax技术的秘密揭秘:异步传输,高效交互
|
3天前
|
XML JSON 前端开发
Ajax – JSON入门指南
Ajax – JSON入门指南
|
4天前
|
前端开发 搜索推荐 安全
AJAX和CSR(客户端渲染)是Web开发中常用的两种技术
【5月更文挑战第8天】AJAX提升用户体验,减轻服务器压力,但对搜索引擎不友好且增加开发复杂度,易引发安全问题。CSR提供快速响应和交互性,改善用户体验,但首屏加载慢,搜索引擎支持不足,同样面临安全挑战。两者各有适用场景,需按项目需求选择。
10 0
|
11天前
|
XML 前端开发 安全
【专栏:HTML 进阶篇】HTML 表单验证与 AJAX 交互
【4月更文挑战第30天】本文探讨了HTML表单验证和AJAX在现代网页开发中的重要性。HTML表单验证通过必填、数据格式和范围验证确保用户输入的准确性,而AJAX则实现异步通信,提供动态数据加载、局部更新和实时交互。两者的结合优化了表单处理,提高用户体验并减少服务器负担。实际应用包括在线注册、购物车系统和表单反馈。然而,开发者需注意浏览器兼容性、错误处理和安全性问题。掌握这些技术,能打造更智能、高效的网页应用,为用户提供更好的体验。在数字化时代,HTML表单验证和AJAX是网页创新与进步的关键。
|
12天前
|
XML 前端开发 JavaScript
【JavaScript技术专栏】JavaScript网络请求与Ajax技术
【4月更文挑战第30天】Ajax是Web开发中实现动态数据更新的关键技术,允许不刷新页面即从服务器获取数据。它结合了HTML/CSS、DOM、XML/JSON和JavaScript。`XMLHttpRequest`是传统的Ajax实现方式,而`fetch` API是现代、简洁的替代选项。Ajax应用实例展示了如何使用fetch在搜索框输入时异步获取并显示结果,提升了用户体验。掌握这些技术对前端开发者至关重要。