使用ajax实现jsp在不刷新页面的前提下与后台进行数据交互

先附上此次测试的相关页面名称及代码,共有三个文件:web.xml、index.jsp以及放在包 com.ajax.com下的AjaxServerlet.java。

代码及解释如下:

(1) index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
 
    <script type="text/javascript">
       //1、获取到xmlhttprequest
    function getXmlhttp() {
        var xmlhttp;
        if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else { // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        return xmlhttp;
    }
    window.onload = function() {
        document.getElementById('mybtn').onclick = function() {
 
            //1、获取到xmlhttprequest 对象
            var xmlhttp = getXmlhttp();
            //2、xmlhttprequest的响应事件
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    //5、操作获取到的信息
                    //5.1ajax返回的数据,转换为javascript对象
                    // 5.1.1 利用eval实现转换
                    var ajaxResult = eval("(" + xmlhttp.responseText + ")");
                    //5.1.2 利用jquery的方法,对于jQuery.parseJSON(),键值必须为双引号
                    /* var ajaxResult = jQuery.parseJSON(xmlhttp.responseText); */
                    alert(ajaxResult)
                    //5.2获取JavaScript对象的属性
                    var age = ajaxResult.age;
                    var name = ajaxResult.name;
 
                    //5.3获取到页面的DIV,并设置内容
                    var mydiv = document.getElementById("myAjax");
                    mydiv.innerHTML = "name:" + name + "," + "age:" + age;
                }
            }
            //3、准备获取ajax请求
            //3.1 对于get请求,带参数的方式,直接在open函数的请求地址带上参数
            xmlhttp.open("POST", "AjaxServerlet", true);
            //4、发送ajax请求
            xmlhttp.setRequestHeader("Content-type",
                    "application/x-www-form-urlencoded");
            /*
             *使用post方法提交时,通过send("age=18&name=zhang")传递参数
             *使用get方法提交时,必须调用send(null)
             *使用post或get都必须使用调用send()
             */
            xmlhttp.send("age=18&name=zhang");
 
        };
    }
    </script>
</head>
<body>
<button id="mybtn">点击</button>
    <div id="myAjax"></div>
</body>
</html>

xmlhttp.readyState 的取值有0,1,2,3,4。readyState的值每一次改变都会自动调用 onreadystatechange 。
ReadyState取值描述

0

描述一种"未初始化"状态;此时,已经创建一个XMLHttpRequest对象,但是还没有初始化。

1

描述一种"发送"状态;此时,代码已经调用了XMLHttpRequest open()方法并且XMLHttpRequest已经准备好把一个请求发送到服务器。

2

描述一种"发送"状态;此时,已经通过send()方法把一个请求发送到服务器端,但是还没有收到一个响应。

3

描述一种"正在接收"状态;此时,已经接收到HTTP响应头部信息,但是消息体部分还没有完全接收结束。

4

描述一种"已加载"状态;此时,响应已经被完全接收。

在点击按钮后,从创建XMLHttpRequest对象开始到数据交互结束,虽然ReadyState一直在变化,但由于会自动调用 onreadystatechange  ,故能在整个过程中实现监听数据交互的整个流程并做出相应的回应,在这里,当 (xmlhttp.readyState == 4 && xmlhttp.status == 200) ,即数据发送完毕且连接正常时,获取后台传过来的数据并显示到 id 为 myAjax 的 div 中。

当不需要传递参数到后台时,可将send()方法中的字符串替换为null,即 send(null),或在 open() 方法中使用 get 方式连接。

(2) web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        id="WebApp_ID" version="3.0">
        
    <servlet>
            <servlet-name>AjaxServerlet</servlet-name>
        <servlet-class>com.ajax.com.AjaxServerlet</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>AjaxServerlet</servlet-name>
        <url-pattern>/AjaxServerlet</url-pattern>
    </servlet-mapping>
</web-app>   
配置servlet的目的是响应 index.jsp 页面中点击按钮出发事件时交由后台java类处理,<url-pattern>标签中的"/AjaxServerlet"即为前端使用ajax时需要连接的url地址,使用时应去掉“/”。

(3) AjaxServerlet.java

package com.ajax.com;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AjaxServerlet extends HttpServlet {
     
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String age = request.getParameter("age");
        String name = request.getParameter("name");
 
        String personJSON = "{\"name" + "\":\"" + name + "\"," + "\"age"
                + "\":" + age + "}";
        System.out.println(personJSON);
        response.getWriter().write(personJSON);
    }
 
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
 
    }
}

获取前端传过来的数据并传参给前端。

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
实现Ajax+PHP数据交互并局部刷新页面,需要以下步骤: 1. 创建一个包含HTML和PHP代码的页面,并在页面顶部引入jQuery库和一个自定义的JavaScript文件。 2. 在JavaScript文件中编写一个Ajax请求的代码,指定请求的URL和请求方法(POST或GET),并定义回调函数。 3. 在PHP文件中编写处理Ajax请求的代码,包括从请求中获取参数、查询数据库、将查询结果转换为JSON格式等。 4. 在回调函数中解析返回的JSON数据,并使用jQuery的DOM操作方法将数据插入到页面中指定的位置,实现局部刷新效果。 下面是一个简单的例子,演示如何使用Ajax和PHP实现查询结果的局部刷新: HTML/PHP页面代码: ```html <html> <head> <title>PHP查询结果局部刷新</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="ajax.js"></script> </head> <body> <h1>查询结果:</h1> <div id="result"></div> <form> <label>输入查询条件:</label> <input type="text" name="keyword" id="keyword"> <input type="button" value="查询" onclick="search()"> </form> </body> </html> ``` JavaScript文件代码(ajax.js): ```javascript function search() { var keyword = $("#keyword").val(); $.ajax({ url: "search.php", type: "POST", data: { keyword: keyword }, dataType: "json", success: function(result) { var html = ""; for (var i = 0; i < result.length; i++) { html += "<p>" + result[i].name + ":" + result[i].value + "</p>"; } $("#result").html(html); }, error: function(jqXHR, textStatus, errorThrown) { alert("查询失败:" + textStatus); } }); } ``` PHP文件代码(search.php): ```php <?php // 连接数据库 $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "database"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("连接失败:" . $conn->connect_error); } // 获取查询条件 $keyword = $_POST["keyword"]; // 查询数据库 $sql = "SELECT * FROM data WHERE name LIKE '%$keyword%'"; $result = $conn->query($sql); // 将查询结果转换为JSON格式 $data = array(); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { $data[] = array("name" => $row["name"], "value" => $row["value"]); } } echo json_encode($data); // 关闭数据库连接 $conn->close(); ?> ``` 在这个例子中,我们在页面中添加了一个输入框和一个查询按钮,用户输入查询条件后,点击查询按钮会触发JavaScript中的search()函数,该函数使用Ajax向search.php发送POST请求,将查询条件作为参数传递给PHP文件,PHP文件从数据库中查询符合条件的数据,并将查询结果转换为JSON格式返回给JavaScript,JavaScript解析JSON数据,并使用jQuery将查询结果插入到页面中指定的位置(id为result的div元素)实现局部刷新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zxj19880502

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

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

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

打赏作者

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

抵扣说明:

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

余额充值