【问题标题】:i am not able to compare the string returned by the ajax request from servlet我无法比较来自 servlet 的 ajax 请求返回的字符串
【发布时间】:2018-06-12 19:34:12
【问题描述】:

谁能帮我解决这个问题? 第一个 if 语句完全正常 但第二个 if 永远不是真的 这意味着每当我打印'not'时它都很好,但是什么时候打印'ok'它不起作用,显然如果我将 else 与第一个一起使用,那么它也不起作用

<script type="text/javascript">
    function signupfunction(){
        var name = document.getElementById('signupname').value;
        var email = document.getElementById('signupemail').value;
        var password = document.getElementById('signuppassword').value; 
        $.ajax({
            url : "AdminSignup?name=" + name + "&email=" + email + 
"&password=" + password + "",
            type : "GET",
            async : true,
            success : function(data) {
                if(data == 'not'){
                    alert("Email already exists");
                } 
                if(data == 'ok'){
                    alert('hello');
                }
            }
        });
    }
</script>

这是我的 servlet 的 doGet() 函数

protected void doGet(HttpServletRequest request, HttpServletResponse 
    response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = 
                DriverManager.getConnection("jdbc:mysql://localhost/amazon? 
                user=root&password=test123");
            PreparedStatement statement = con.prepareStatement("select * from 
                sellers where email=?");
            statement.setString(1, request.getParameter("email"));
            ResultSet rs = statement.executeQuery();
            if(rs.next()) {
                response.getWriter().print("not");
            } else {
                PreparedStatement statement1 = con.prepareStatement("insert 
                    into sellers(email,password,name) values(?,?,?)");
                statement1.setString(1, request.getParameter("email"));
                statement1.setString(2, request.getParameter("password"));
                statement1.setString(3, request.getParameter("name"));
                statement1.executeUpdate();
                session.setAttribute("sessionAdminEmail", 
                    request.getParameter("email"));
                session.setAttribute("sessionAdminName", 
                    request.getParameter("name"));
                response.getWriter().print("ok");
            }
        } catch (Exception e) {

          }
    }

【问题讨论】:

  • println 添加了一个换行符,我想。
  • 嘿,感谢它的工作,但仍然不完全。你能检查一下更新的问题吗!
  • 如果你使用 postman 之类的东西,你能在响应中看到问题吗?
  • 不,我很抱歉我没有在这里使用邮递员
  • 所以我想你的回复是总是 not?

标签: javascript java ajax jsp servlets


【解决方案1】:

你搞错了

response.getWriter().print("ok"); //this will not send your value to ajax

与:

response.getWriter().write("inserted new user");   //this will

您的 Servlet:

protected void doGet(HttpServletRequest request, HttpServletResponse 
        response) throws ServletException, IOException {
            HttpSession session = request.getSession();
            response.setContentType("text/plain");  // Set content type of the response so that jQuery knows what it can expect.
            response.setCharacterEncoding("UTF-8"); // You want world domination, huh?
 try {


        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/amazon?user=root&password=test123");

        PreparedStatement statement = con.prepareStatement("select * from sellers where email=?");
        statement.setString(1, request.getParameter("email"));
        ResultSet rs = statement.executeQuery();

        if(rs.next()) {
            //if the email exists in sellers, then this will always evaluate to true...
            //response.getWriter().print("not"); //print will not send your value back to ajax..
            response.getWriter().write("email exists");       // Write response body.
        } else {
            PreparedStatement statement1 = con.prepareStatement("insert into sellers(email,password,name) values(?,?,?)");
            statement1.setString(1, request.getParameter("email"));
            statement1.setString(2, request.getParameter("password"));
            statement1.setString(3, request.getParameter("name"));
            statement1.executeUpdate();
            session.setAttribute("sessionAdminEmail", request.getParameter("email"));
            session.setAttribute("sessionAdminName", request.getParameter("name"));
            //response.getWriter().print("ok"); print will not send your value back to ajax
            response.getWriter().write("inserted new user");       // Write response body.
        }
    } catch (Exception e) {

      }
}

还值得一提的是===== 不同。在这种情况下使用===,它是您要查找的比较运算符。查看this 了解有关差异的说明

<script type="text/javascript">
    function signupfunction(){
        var name = document.getElementById('signupname').value;
        var email = document.getElementById('signupemail').value;
        var password = document.getElementById('signuppassword').value; 
        $.ajax({
            url : "AdminSignup?name=" + name + "&email=" + email + 
"&password=" + password + "",
            type : "GET",
            async : true,
            success : function(data) {
                if(data === 'email exists'){
                    alert("Email already exists");
                } 
                if(data === 'inserted new user'){
                    alert('new user');
                }
            }
        });
    }
</script>

还请查看这个答案,它很好地解释了如何将 Ajax 与 Servlet 一起使用。 (比你目前的做法容易得多)

How to use Servlets and Ajax?

【讨论】:

  • 以上答案有帮助吗?我刚刚(在此处添加我的体重)=== 进行比较。
  • 不,还是一样。第一个 if 条件有效,但第二个条件无效。我现在在 servlet 和 javascript 中使用 write 而不是 print
  • 在 if 语句之前但在成功块内执行 console.log (data)(或警报)...并告诉我你看到了什么
最近更新 更多