JavaScript AJAX 图文详解:从环境搭建到GET/POST请求实现

沿途有光
沿途有光
发布时间:2026-10-13| 4人浏览过
原创

AJAX的核心在于使用XMLHttpRequest对象在不刷新整个页面的情况下与服务器进行异步数据交换。本文将结合Java后端Servlet,从零开始搭建开发环境,通过具体的代码示例和浏览器调试截图,详细解析基于GET和POST方式的数据请求流程及响应处理。

开发环境与基础配置

AJAX技术常用于前端页面与后端服务器之间的数据传输,实现网页的局部刷新。为了展示这一过程,我们需要一个标准的JavaWeb运行环境。以下操作基于Eclipse开发工具和Apache Tomcat服务器。

第1步:创建Web项目结构

首先,在Eclipse中新建一个Dynamic Web Project。项目的目录结构是后续开发和部署的基础,确保主要代码文件放置在正确的包路径下。

web.xml配置说明: 在项目根目录的WEB-INF文件夹下,必须包含web.xml配置文件。虽然现代框架多采用注解配置,但理解原始的XML注册方式是掌握Servlet原理的关键。最基本的配置文件应至少包含XML声明和根节点<web-app>。

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
</web-app>

第2步:验证基础环境

为了确保服务器能够正确加载静态资源,建议在WebContent目录下新建一个JSP页面作为入口。index.jsp文件中可以写入简单的HTML进行测试。

编写一个简单的Hello World页面用于测试路径映射:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test Page</title>
</head>
<body style="padding:100px">
<h1>Hello World</h1>
</body>
</html>

启动Tomcat服务器后,访问http://localhost:80/ajax/index.jsp(端口以实际配置为准)。如果页面正常显示且无报错,说明环境搭建成功。

服务端Servlet程序编写

Servlet相当于Web应用程序中的功能模块。就像电脑上的QQ或Word软件一样,每个Servlet处理一种特定的请求逻辑。在使用Spring MVC等现代框架时,Controller本质上也是对Servlet的封装。因此,理解原生Servlet的创建、继承及注册是掌握底层原理的必要步骤。

第3步:注册与编写MyServlet

创建一个继承自HttpServlet的类MyServlet,并重写doGet方法。随后,必须在web.xml中进行显式注册,指定其名称、类路径以及访问URL模式(url-pattern)。

web.xml核心配置代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<!-- 访问路径为 /MyServlet -->
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
</web-app>

重启Tomcat后,直接访问http://localhost:80/ajax/MyServlet,确认请求到达后端但未返回具体内容的初始状态。

前端交互界面设计

为了实现与服务器的异步交互,需要在前端页面中添加表单元素和按钮。引入Bootstrap框架可以快速构建美观的输入框和按钮组件。

第4步:整合Bootstrap与JS事件绑定

修改index.jsp,引入Bootstrap的CSS样式,并添加一个简单的文本输入框和一个提交按钮。同时,使用原生JavaScript监听按钮的点击事件,暂时仅输出弹窗以验证事件触发正常。

<%-- ... 头部省略 ... --%>
<script>
window.onload = function(){
var btn = document.getElementById("submit");
btn.onclick = function(){
alert("Click Detected"); // 验证点击事件
}
};
</script>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-lg-8">
<div class="input-group">
<input type="text" class="form-control" id="msgInput">
<span class="input-group-btn">
<button id="submit" class="btn btn-default" type="button">提交</button>
</span>
</div>
</div>
</div>
</div>
</body>

渲染后的界面效果如下所示,用户可在输入框中输入文字。

基于GET方式的数据请求

传统的Form表单提交会导致页面刷新,而AJAX可以实现无刷新提交。这里我们通过原生的XMLHttpRequest对象来构建GET请求。

第5步:编写XMLHttpRequest逻辑

在按钮点击事件中,初始化xhr对象,调用open方法设置请求类型为"get",并在URL参数拼接输入的值,最后调用send()发送。后端Servlet接收参数后,将结果回写到响应流中。

前端JS请求代码:

btn.onclick = function(){
// 兼容旧版IE的XMLHttpRequest创建
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");

// open(method, url, async)
var inputValue = document.getElementsByTagName("input")[0].value;
xhr.open("get", "MyServlet?message=" + inputValue, true);

// 监听状态变化
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
alert(xhr.responseText);
}
};

xhr.send();
};

后端Servlet修改:读取请求参数并回写响应。

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String msg = req.getParameter("message");
System.out.println(msg); // 控制台打印查看接收到的数据

resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("你好,这是服务器返回的信息!");
out.flush();
out.close();
}

打开浏览器开发者工具(F12),进入Network标签页。刷新页面可以看到对index.jsp的请求及CSS文件的加载过程。

当点击提交按钮后,Network面板会新增一条名为MyServlet的请求记录。检查控制台输出,确认服务器已接收到传递的参数。

由于之前未设置响应体,首次测试可能弹窗为空。配置好服务器端的out.println后,再次点击提交,前端即可收到“你好,这是服务器返回的信息!”的弹窗提示。

回到开发者工具的Preview或Headers选项卡,可以清晰看到此次GET请求的URL结构及返回的Text内容。

关于Ajax请求状态

在处理异步请求时,必须关注readyState属性,它代表请求的当前阶段:

  • 0: 请求未初始化
  • 1: 服务器连接已建立(已调用open)
  • 2: 请求已接收(已调用send)
  • 3: 请求处理中
  • 4: 请求已完成,且响应已就绪

只有当readyState等于4,且HTTP状态码status为200时,才表示数据已成功获取。

基于POST方式的数据请求

相比于GET方法会将参数暴露在URL中,POST方法更加安全且不受长度限制。其核心区别在于需要设置请求头并手动序列化数据。

第6步:转换AJAX发送逻辑

修改前端代码:open改为"post",添加setRequestHeader设置application/x-www-form-urlencoded类型,并将数据序列化为key=value&格式字符串传入send()。

var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
xhr.open("post", "MyServlet", true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

var inputVal = document.getElementsByTagName("input")[0].value;
var postDataStr = "message=" + inputVal;

alert(postDataStr); // 调试用,确认数据格式
xhr.send(postDataStr);

xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
alert(xhr.responseText);
}
};

后端Servlet完善:增加Post方法的接收逻辑。为避免重复代码,通常在doPost中直接委托给doGet执行,但需注意Post请求通常要手动设置字符编码。

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8"); // Post需处理编码
String msg = req.getParameter("message");
System.out.println(msg);

resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("你好,这是服务器返回的信息!");
out.flush();
out.close();
}

以上就是JavaScript中AJAX图文详解的详细内容,更多关于JavaScript ajax编程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。