如何在jsp和ajax中为两个选择选项框动态获取和填充从mysql到HTML选择选项的值

系统管理员

我在从 MySQL 数据库中获取数据并使用 ajax 将其填充到 html 选择选项时遇到问题。它为第一个选择框正确显示的值,但对于第二个选择框,它显示第一个文本框的内容以及第二个文本框的结果。请帮我在下面的代码中找到问题。我没有使用任何框架。其简单的jsp、ajax 和mysql dynamicweb 项目。

尝试了很多可能的解决方案

这是我的代码

<%@page import="java.sql.ResultSetMetaData"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Generic CRUD Home</title>

<script>
    var request;
    function sendSchema() {
        var schemaOption = document.getElementById('schemaName');
        var selectedSchema = schemaOption.options[schemaOption.selectedIndex].value;
        var url = "index.jsp?schema=" + selectedSchema;

        if (window.XMLHttpRequest) {
            request = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            request = new ActiveXObject("Microsoft.XMLHTTP");
        }

        try {
            request.onreadystatechange = getTableList;
            request.open("GET", url, true);
            request.send();
        } catch (e) {
            alert("Unable to connect to server");
        }
    }

    function getTableList() {
        if (request.readyState == 4) {
            var tablesList = request.responseText;
            document.getElementById('tableName').innerHTML = tablesList;
            console.log('tablesList :' + tablesList);
            console.log('tablesListXML :' + tablesListXML);
            var tablesListXML = request.responseXML.getElementsById('tableName');
            console.log('tablesListXML :' + tablesListXML);
        }
    }
    //  var xmlhttp;
    //  function sendTable() {
    //      var tableOption = document.getElementById('tableName');
    //      var selectedTable = tableOption.options[tableOption.selectedIndex].value;
    //      var url = "index.jsp?table=" + selectedTable;

    //      if (window.XMLHttpRequest) {
    //          xmlhttp = new XMLHttpRequest();
    //      } else if (window.ActiveXObject) {
    //          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    //      }

    //      try {
    //          xmlhttp.onreadystatechange = getTableContents;
    //          xmlhttp.open("GET", url, true);
    //          xmlhttp.send();
    //      } catch (e) {
    //          alert("Unable to connect to server");
    //      }
    //  }

    //  function getTableContents() {
    //      if (xmlhttp.readyState == 4) {
    //          var tableContents = xmlhttp.responseXML;
    //          document.getElementById('tableContent').innerHTML = tableContents;
    //      }
    //  }
</script>
</head>
<body>
    <h1>Generic CRUD Home</h1>

    <%
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
        Statement stmtSchemaList = conn.createStatement();
        Statement stmtTableLit = null;
        ResultSet rsSchemaList = stmtSchemaList.executeQuery("show databases");
        ResultSet rsTableList = null;
        ResultSetMetaData rsmd = null;
    %>
    Database/Schema Name :
    <select id="schemaName" onchange="sendSchema()">
        <option value="null" selected="selected">Select
            Database/Schema</option>
        <%
            while (rsSchemaList.next()) {
                out.println(
                        "<option value=" + rsSchemaList.getString(1) + ">" + rsSchemaList.getString(1) + "</option>");
            }
            rsSchemaList.close();
            if (request.getParameter("schema") != null) {
                String selectedSchema = request.getParameter("schema");
                stmtTableLit = conn.createStatement();
                stmtTableLit.execute("use " + selectedSchema);
                PreparedStatement pstmt = conn.prepareStatement("show tables");
                rsTableList = pstmt.executeQuery();

            }
        %>
    </select> Table :
    <select id="tableName" onchange="sendTable()">
        <option value="null" selected="selected">Choose the Table</option>
        <%
            if (rsTableList != null) {
                while (rsTableList.next()) {
                    out.println(
                            "<option value=" + rsTableList.getString(1) + ">" + rsTableList.getString(1) + "</option>");
                }
                rsTableList.close();
            }
        %>
    </select>

    <div id="tableContent">
        <table border="0">
        </table>
    </div>
</body>
</html>

我得到的输出是

输出我运行此代码时得到的内容

在此处输入图片说明

斯瓦蒂

在您的 ajax 调用中,您需要获取select-box(表名),然后您需要将其分配给 some <div>. 在您的代码中进行以下更改以使其工作:

Javascript

function sendSchema() {
        var schemaOption = document.getElementById('schemaName');
        var selectedSchema = schemaOption.options[schemaOption.selectedIndex].value;
        var url = "somepage.jsp?schema=" + selectedSchema;

        if (window.XMLHttpRequest) {
            request = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            request = new ActiveXObject("Microsoft.XMLHTTP");
        }

         request.onreadystatechange= function() 
                        {
                            if(this.readyState === 4 && this.status === 200) {
                            document.getElementById("table").innerHTML =this.responseText;// getting response and assign to div with id->table
                        }
                    }; 
                        request.open("GET",url,true);  
                        request.send();
    }

现在somepage.jsp把你的数据库代码如下:

<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>


     <%
          Statement stmtTableLit = null;
          ResultSet rsTableList = null;
      Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");

     if (request.getParameter("schema") != null) {
                    String selectedSchema = request.getParameter("schema");//getting data 
                    stmtTableLit = conn.createStatement();
                    stmtTableLit.execute("use " + selectedSchema);
                    PreparedStatement pstmt = conn.prepareStatement("show tables");
                    rsTableList = pstmt.executeQuery();

                }
   //whatever will be  there in out.println() will be sent back as response to your index.jsp page         
       out.println('<select id="tableName" onchange="sendTable()">
            <option value="null" selected="selected">Choose the Table</option>');

                if (rsTableList != null) {
                    while (rsTableList.next()) {
                        out.println(
                                "<option value=" + rsTableList.getString(1) + ">" + rsTableList.getString(1) + "</option>");
                    }
                    rsTableList.close();
                }

        out.println('</select>');
     %>

在您的 index.jsp 中,只需添加一个<div id="table"></div>,这里就会响应somepage.jsp,也不要忘记从您的 index.jsp 页面中删除额外的代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从jQuery的选择选项中添加两个不同的数组值(文本和值)

来自分类Dev

动态选择选项php和mysql

来自分类Dev

如何在动态html表javascript中选择选项值。无法从jsp页面的数据库中获取更新的选项值

来自分类Dev

如何从一个选择选项中获得两个值?

来自分类Dev

如何将HTML中的选择选项与两个预定义值绑定以在mongodb中插入数据

来自分类Dev

如何在jQuery中显示基于两个不同选择选项的段落

来自分类Dev

根据动态表中的另一个选择选项选择选项值

来自分类Dev

两个选择选项 - 不需要验证和隐藏选项

来自分类Dev

使用选择选项更新动态生成的两个框的价格

来自分类Dev

在选择选项中对齐两个单词

来自分类Dev

用户从下拉列表框中选择选项后,如何获取新选择的值和旧的值?

来自分类Dev

重新填充表单中的单选按钮和选择选项

来自分类Dev

如何从选择选项和输入中获取信息,另一个输入?

来自分类Dev

从选择选项获取值和名称

来自分类Dev

如何在JavaScript中加载选择选项值动态

来自分类Dev

如何在PHP中编辑和更新表单选择选项值

来自分类Dev

如何在动态选择框中基于行显示已生成的选择选项

来自分类Dev

jQuery基于两个单选按钮和选择选项显示和隐藏div

来自分类Dev

如何获取选择选项的选定值?

来自分类Dev

选择选项HTML和Switch Javascript

来自分类Dev

如何在laravel中创建动态选择选项?

来自分类Dev

在html中显示选择选项的值

来自分类Dev

在html中显示选择选项的值

来自分类Dev

在html中显示选择选项的值

来自分类Dev

在html中显示选择选项的值

来自分类Dev

如何设置VW和VH值以选择选项

来自分类Dev

我如何使用JavaScript获取选择选项中的值

来自分类Dev

使用 jQuery 将数据库中的选择选项填充到动态选择选项

来自分类Dev

如何限制两个选择选项以匹配某个值?

Related 相关文章

  1. 1

    从jQuery的选择选项中添加两个不同的数组值(文本和值)

  2. 2

    动态选择选项php和mysql

  3. 3

    如何在动态html表javascript中选择选项值。无法从jsp页面的数据库中获取更新的选项值

  4. 4

    如何从一个选择选项中获得两个值?

  5. 5

    如何将HTML中的选择选项与两个预定义值绑定以在mongodb中插入数据

  6. 6

    如何在jQuery中显示基于两个不同选择选项的段落

  7. 7

    根据动态表中的另一个选择选项选择选项值

  8. 8

    两个选择选项 - 不需要验证和隐藏选项

  9. 9

    使用选择选项更新动态生成的两个框的价格

  10. 10

    在选择选项中对齐两个单词

  11. 11

    用户从下拉列表框中选择选项后,如何获取新选择的值和旧的值?

  12. 12

    重新填充表单中的单选按钮和选择选项

  13. 13

    如何从选择选项和输入中获取信息,另一个输入?

  14. 14

    从选择选项获取值和名称

  15. 15

    如何在JavaScript中加载选择选项值动态

  16. 16

    如何在PHP中编辑和更新表单选择选项值

  17. 17

    如何在动态选择框中基于行显示已生成的选择选项

  18. 18

    jQuery基于两个单选按钮和选择选项显示和隐藏div

  19. 19

    如何获取选择选项的选定值?

  20. 20

    选择选项HTML和Switch Javascript

  21. 21

    如何在laravel中创建动态选择选项?

  22. 22

    在html中显示选择选项的值

  23. 23

    在html中显示选择选项的值

  24. 24

    在html中显示选择选项的值

  25. 25

    在html中显示选择选项的值

  26. 26

    如何设置VW和VH值以选择选项

  27. 27

    我如何使用JavaScript获取选择选项中的值

  28. 28

    使用 jQuery 将数据库中的选择选项填充到动态选择选项

  29. 29

    如何限制两个选择选项以匹配某个值?

热门标签

归档