я не могу сравнить строку, возвращенную запросом ajax из сервлета - PullRequest
0 голосов
/ 12 июня 2018

Может кто-нибудь помочь мне с этим?первое выражение if работает совершенно нормально, но второе if никогда не соответствует действительности, что означает, что всякий раз, когда я печатаю 'not', это нормально, но когда печатается 'ok', это не работает, и, очевидно, если я использую другое с первым, если тогда тоже не работает

<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>

вот моя функция 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) {

          }
    }

1 Ответ

0 голосов
/ 13 июня 2018

Вы смешиваете

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

с:

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

Ваш сервлет:

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 с сервлетами.(гораздо проще, чем в настоящее время)

Как использовать сервлеты и Ajax?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...