2015-06-16 45 views
0

我有這個jsp文檔(如下)。基本上,當用戶輸入文本框時,如果數據庫中存在用戶名/長度爲< 5等,我想顯示一個錯誤。JQuery/AJAX代碼錯誤 - 在文本框中鍵入文本時不顯示

我希望通過jQuery/AJAX無需刷新即可同時顯示這些錯誤。我做到了這一點,但似乎沒有工作。這裏,CheckAvailability和Success是servlet,CheckVailability檢查數據庫中是否存在。

JSP文件:

<!DOCTYPE html> 
<html> 
<head> 
<script src="js/jquery-1.11.3.js"></script> 
<script> 
$(document).ready(function() { 
    $('#username').keyup(function() { 
    var name = $('#username').val(); 
      $.get('CheckAvailability?username='+name,function(responseText){ 
        $('#status').text(responseText);});});  
    </script> 
    </head> 
    <body> 
    <form id="login_form" ><input type="text" placeholder="username" name="username" class="style-4" required="required" action="Success"/> 
    <div id="status"> </div> 

CheckAvailability的Servlet

public class CheckAvailability extends HttpServlet { 

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 
    Connection conn=null; 
    Statement s=null; 
    ResultSet rs=null; 
    PreparedStatement ps; 
    try { 
      //make connection 
      String userid = request.getParameter("username"); 
      String arr; 

       Class.forName("oracle.jdbc.OracleDriver"); 

       if (userid.equals("")) { 
        arr = "Error: User name cannot be empty"; 

       } else if(userid.length()<5){ 
       arr="Error: Username cannot be less than 5 characters."; 

       } 
       else 
       { 
        String table="user1.app_users"; 
        String p = "alpha";//database password 
        String query = "select userid from " + table + " where userid='" + userid + "'"; 
        String url = "jdbc:oracle:thin:system/" + p + "@localhost:1521:XE"; 

        conn = DriverManager.getConnection(url); 
        s = conn.createStatement(); 
        ps = conn.prepareStatement(query); 
        rs = ps.executeQuery(); 

        if (!rs.next()) { 
         arr="UserID <b>" + userid + "</b> is available."; 


        } else { 
         arr= "Error: UserID <b>" + userid + "</b> is already in use."; 
         } 
       } 

       response.setContentType("text/plain"); 
       response.getWriter().write(arr); 

    }catch (SQLException se) { 
      out.println("Error ->" + se.getMessage()); 
     } catch(ClassNotFoundException ce) 
     { 
      out.println("Error ->" + ce.getMessage()); 
     }finally { 
      out.close(); 
     } 
    } 
    } 

但正如我在文本框中鍵入此不顯示任何內容。 servlet在提交時觸發。沒有發生的事情是文本沒有顯示出來。代碼執行,在我的IDE沒有錯誤。我不能完全運行這個servlet,它會給出錯誤信息:'HTTP方法GET不被這個URL支持',即當我使用參數運行它時。我在裏面輸入了字符串用戶名=「user12」,並且沒有運行。有人可以指出我的錯誤嗎?我是jQuery/AJAX的新手。

+0

你還沒有完成'});''準備好''' – Tushar

+0

謝謝你指出......但即使糾正後,它不起作用。 – user2816215

回答

1

這爲我工作:

$(document).ready(function() {      
      $('#userid').keyup(function(event) { 
       var user=$('#userid').val(); 
       $.get('CheckValidity',{username:user},function(responseText) { 
        $('#status').text(responseText);   
       }); 
      }); 
     }); 

不得不使用不同的JQuery 。

0

覆蓋doGet,因爲javax.servlet.http.HttpServlet沒有任何processRequest方法。

@Override 
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
    PrintWriter writer = resp.getWriter(); 
    writer.print("hi " + req.getParameter("username")); 
} 

Read this

反正..你怎麼宣佈你的servlet?通過註釋?在web.xml中?什麼是URL模式?

如果使用的web.xml:

<servlet> 
    <servlet-name>CheckAvailability Servlet</servlet-name> 
    <servlet-class>your.package.CheckAvailability</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>CheckAvailability Servlet</servlet-name> 
    <url-pattern>/CheckAvailability</url-pattern> 
</servlet-mapping> 

如果使用註釋:

@WebServlet("/CheckAvailability") 
public class Serv extends HttpServlet { 
    // ... 
} 
+0

它通過web.xml,如上所述。 不,並沒有解決問題。重寫doGet,我的意思是。 jQuery只是沒有得到執行。我添加了警報,但他們也不工作。 – user2816215