Div 标记不显示任何结果

Div tag doesn't show any result

本文关键字:任何 结果 显示 Div      更新时间:2023-09-26
在使用

AJAX 调用向 JSP 页面发送请求后,在我的代码中,它不会在 <div> 标记中显示结果。我的<div>标签的ID是"div1"。控制权将传递给 JSP 页。处理 JSP 页后,responseText中的值不会显示在 <div> 标记中。我不明白原因。我特此附上代码...我还可以将事件添加到"new.jsp"文件的标签中吗?

<%-- 
Document   : Databases
Created on : Nov 10, 2014, 3:08:01 PM
Author     : user
--%>
   <%@page import="java.sql.PreparedStatement"%>
  <%@page import="java.sql.DatabaseMetaData"%>
   <%@page import="java.sql.ResultSet"%>
   <%@page import="querywork.DBConnection"%>
   <%@page import="java.sql.Statement"%>
  <%@page import="java.sql.DriverManager"%>
  <%@page import="java.sql.Connection"%>
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Untitled Document</title>
    <script language="javascript"   type="text/javascript">
        try
        {
            function create(str)
            { 
                var xmlHttp 

                xmlHttp=CreateXmlHttpObject()
                if (xmlHttp==null)
                {
                    alert ("Browser does not support HTTP Request")
                    return
                } 
                var url="new.jsp"
                url=url+"?dbname="+str
                url=url+"&sid="+Math.random()
                //  out.print(url)
                xmlHttp.onreadystatechange=stateChanged 
                xmlHttp.open("GET",url,true)
                xmlHttp.send()
            }
            function stateChanged() 
            { 
                if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
                { 
                    document.getElementById("div1").innerHTML=xmlHttp.responseText 
                } 
            } 
            function CreateXmlHttpObject()
            { 
                var objXMLHttp=null
                if (window.XMLHttpRequest)
                {
                    objXMLHttp=new XMLHttpRequest()
                }
                else if (window.ActiveXObject)
                {
                    objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
                }
                return objXMLHttp
            }
        }
        catch(err)
        {}
    </script>
</head>

<body>
    <form id="form1" name="form1" method="post" action="">
        <h2>Databases</h2>
        <label>
            <input type="text" name="textfield" value="Database Name" id="dbname" />
        </label>
        <label>
            <input type="submit" name="Submit" value="CREATE" onClick="create(textfield.value)"/>
        </label>
        <p>&nbsp;</p>

        <%
            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/", "root", "");
                DatabaseMetaData dbmd = conn.getMetaData();
                ResultSet ctlgs = dbmd.getCatalogs();
        %>

        <table border="1" cellpadding ="2"cellspacing="3">
            <tr>
                <td>
                </td>
                <td>
                    Database Name
                </td>
            </tr>
            <%
                while (ctlgs.next()) {
            %>
            <tr>
                <td>
                    <input name="ch" type="checkbox" value="" id="" />
                </td>
                <td>
                    <%=ctlgs.getString(1)%>
                </td>
            </tr>
            <%}
                } catch (Exception e) {
                    out.println(e);
                }%>
        </table>
        <a href="Delete.jsp">Drop</a>
        <br></br>
        <div id="div1">ffff</div>
    </form>

</body>

新.jsp

<%-- 
Document   : new
Created on : Nov 11, 2014, 12:41:34 PM
Author     : user
--%>
  <%@page import="java.sql.PreparedStatement"%>
  <%@page import="java.sql.DriverManager"%>
 <%@page import="java.sql.Connection"%>
    <%@page import="querywork.DBConnection"%>
   <%@page import="javax.faces.component.behavior.AjaxBehavior"%>
     <%@page contentType="text/html" pageEncoding="UTF-8"%>
   <!DOCTYPE html>
  <%
try {
    String responseText = new String("");
    boolean flg = false;
    String OptionValue = (String) request.getParameter("dbname");

    Class.forName("com.mysql.jdbc.Driver").newInstance();
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/", "root", "");
    PreparedStatement ps = conn.prepareStatement("create database " + OptionValue);
    int k = ps.executeUpdate();
    if (k > 0) {
        flg = true;
    } else {
        flg = false;
    }
    responseText += OptionValue;
} catch (Exception e) {
    out.print(e);
}
 %>

这些是我发现的问题:

问题 1

您正在创建一个responseText字符串,但未将其写入输出流,因此它不会出现在发送回客户端的响应中。

try块的末尾(以new.jsp为单位),在做完之后

responseText += OptionValue;

您需要添加

out.print(responseText);

问题 2

您的按钮类型为 submit ,因此它会提交表单。这意味着页面将在调用 AJAX 请求后立即重新加载。将return false添加到onclick处理程序,如下所示:

<input type="submit" name="Submit" value="CREATE"
    onclick="create(textfield.value); return false;"/>

或者将你的臀部从submit按钮改为常规按钮:

<input type="button" name="Submit" value="CREATE"
    onclick="create(textfield.value)"/>

问题 3

您需要在create方法之外声明var xmlHttp。就像现在一样,您的stateChanged()方法无法访问您的xmlHttp变量。