12.4 Ajax的基础操作

 

12.4 Ajax的基础操作

在jQuery中,向服务器请求数据的方法有很多。其中,基本的方法是$.ajax(),它可以精确地控制Ajax请求。例如,在请求出错时执行某些操作,设置请求字符集和超时时间等。

$.ajax()方法是jQuery中底层的Ajax方法,前面讲解的$.get()方法、$.post()方法就是对$.ajax()方法进一步的封装。$.get()方法、$.post()方法的实际封装代码如下:

jQuery.each(["get", "post"], function(i, method) {
  jQuery[method] = function(url, data, callback, type) {
    // 为了使用方便,如果没有输入data参数,变量会位移
    if (jQuery.isFunction(data)) {
      type = type || callback;
      callback = data;
      data = undefined;
    }
    return jQuery.ajax({
      url: url,
      type: method,
      dataType: type,
      data: data,
      success: callback
    });
  };
});

从第9~15行代码可以看出,$.get()方法和$.post()方法在底层都是调用$.ajax()实现相应功能的。

 

$.ajax()方法可以实现所有关于Ajax的操作,其语法格式如下:

$.ajax(options) // 语法格式1
$.ajax(url, options) // 语法格式2

在语法格式1中,将所有请求的参数以key-value的形式包装在options参数中。$.ajax()方法可设置的参数如下表12-4所示。

 

 

 

 

表12-4 $.ajax()方法可设置的参数

参数描述
url请求地址,默认为当前页面
data发送至服务器的数据
xhr用于创建XMLHttpRequest对象的函数
beforeSend(xhr)发送请求前执行的函数
success(result, status, xhr)请求成功时执行的函数
error(xhr, status, error)请求失败时执行的函数
complete(xhr, status)请求完成时执行的函数(无论请求成功或失败都会调用)
dataType预期的服务器响应的数据类型
type请求方式(GET或POST)
cache是否允许浏览器缓存被请求的页面,默认为true
timeout设置本地的请求超时时间(以毫秒计)
async是否使用异步请求,默认为true
username在HTTP访问认证请求中使用的用户名
password在HTTP访问认证请求中使用的密码
contentType发送数据到服务器时所使用的内容类型,默认为application/x-www-form-urlencoded
processData是否将请求发送的数据转换为查询字符串,默认为true
context为所有Ajax相关的回调函数指定this
dataFilter(data, type)用于处理XMLHttpRequest原始响应数据
global是否为请求触发全局Ajax事件处理程序,默认为true
ifModified是否仅在最后一次请求后响应发生改变时才请求成功,默认为false
traditional是否使用传统方式序列化数据,默认为false
scriptCharset请求的字符集

为了让读者更清晰地掌握$.ajax()方法的使用,下面通过一个案例分步演示Ajax的基本操作。

1. 在JSP页面实现$.ajax()方法

在项目chapter12的web目录中创建名为ajax.jsp的JSP文件,用于实现Ajax异步登录。ajax.jsp的实现如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Ajax</title>
    <script type="text/javascript" src="${pageContext.request.contextPath}/jquery-3.6.0.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $("button").click(function() {
                $.ajax({
                    type: "post",
                    url: "http://localhost:8080/chapter12/AJAXServlet",
                    data: {
                        userName: $("#userName").val(),
                        password: $("#password").val()  // data中的内容会自动添加到url后面
                    },
                    dataType: "text",  // 返回数据的格式
                    success: function(a) {  // 请求成功时执行的函数
                        if (a == "true") {
                            $('#suss').html("登录成功!");
                        } else {
                            $('#suss').html("登录失败!");
                        }
                    },
                    error: function() {  // 请求失败时执行的函数
                        alert("请求失败");
                    }
                });
            });
        });
    </script>
</head>
<body>
<div>
    <div>
        <ul>
            <li>用户名:</li>
            <li><input id="userName" name="userName" type="text"/></li>
        </ul>
    </div>
    <div>
        <ul>
            <li>密码:</li>
            <li><input id="password" name="password" type="password"/></li>
        </ul>
    </div>
    <div>
        <ul>
            <li><button>登录</button></li>
        </ul>
    </div>
    <div id="suss"></div>
</div>
</body>
</html>

在文件12-10中,第7行到第31行代码就是$.ajax()方法的实现。其中,第8行中$(document).ready()是jQuery中的方法,在页面加载后优先执行ready()方法内的代码;第12行代码的url属性后的值是请求的Servlet地址;第17行的dataType属性用于设置返回的数据格式,常用的有textjsonscripthtmlxmlstring,此处使用text格式。

2. 编写Servlet代码

在chapter12项目的src目录下创建名为AJAXServlet的Servlet类,用于判断用户输入的账号和密码是否正确。AJAXServlet类的实现如下:

@WebServlet(name = "AJAXServlet", urlPatterns = "/AJAXServlet")
public class AJAXServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        boolean flag = false;
        if ("itcast".equals(request.getParameter("userName")) && "123".equals(request.getParameter("password"))) {
            flag = true;  // 登录成功标志
        }
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.print(flag);
        out.flush();
        out.close();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

上面代码中,第22行设置了输出较方便的方式,返回登录的结果。

3. 启动并测试

在IDEA中启动Tomcat,然后在浏览器访问http://localhost:8080/chapter12/ajax.jsp,结果如图12-13和图12-14所示。

这个案例展示了如何使用$.ajax()实现Ajax异步操作,并通过一个简单的用户名和密码的验证来示范Ajax在开发中的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值