2017-09-15 79 views
6

Próbuję zweryfikować nazwę użytkownika i inne pola podczas tworzenia strony z hasłem zmiany. Problemem jest wywołanie AJAX w skrypcie Jquery nie trafiającym do mojego kontrolera. Próbowałem podając również zakodowaną ścieżkę w polu adresu URL żądania ajax. Poniżej znajduje się mój skryptWywołanie JQuery/AJAX nie uderza w kontroler Spring MVC

ta funkcja checkUname jest wyzwalana w zdarzeniu onblur z jednego z pól wejściowych.

<script type="text/javascript"> 
     function checkUname() 
      { 
       // get the form values 

       var uName = $('#username').val(); 
       var secQues = $('#secQues').val(); 
       var secAns = $('#secAns').val(); 

       var dataObject = JSON.stringify({ 
                'uName' : uName, 
                'secQues': secQues, 
                'secAns' : secAns 
               }); 
      $.ajax({ 
        url:"validateCredentials.do" , 
        type: "POST" , 
        data: dataObject , 
        contentType: "application/json; charset=utf-8" , 
        dataType : 'json' ,     
        success: function(response) 
               { 
               alert(response);       
               } , 
        error: function() 
             { 
             alert('Error fetching record.... Sorry..'); 
             } 
        }); 
     } 
     </script> 

To jest mój kontroler MVC

@Controller 
public class ArsController 
{ 
    @RequestMapping(value="validateCredentials.do", method = RequestMethod.POST) 
    public String changePass(@RequestParam("uName") String uName ,@RequestParam("secQues")String secQues, 
            @RequestParam("secAns") String secAns) 
    { 
     System.out.println("AJAX request"); 
     Users dummyUSer = null; 
     String msg = null; 

       try 
       { 
        dummyUSer = servObj.findUser(uName); 
       } 
       catch (ArsException e) 
       { 
        System.out.println("error occurred while validating user data during password change"); 
        e.printStackTrace(); 
       } 

       if(dummyUSer == null) 
       { 
        msg = "No user exists with this username"; 
       } 

       else 
       { 
        if(!secQues.equals(dummyUSer.getSecQues())) 
        { 
         msg = "Security question is not correct"; 
        } 
        else 
        { 
         if(!secAns.equals(dummyUSer.getSecAns())) 
         { 
          msg = "Security answer does not match"; 
         } 
        } 
       } 

     return msg; 
    } 
+0

Nie mam pomysł na temat kodu Java, ale żądanie AJAX ma 'type:" POST "' podczas gdy powinno być 'method:" POST "' –

+0

Wprowadziłem zmiany zgodnie z sugestią, ale teraz otrzymuję komunikat "INFO: Błąd analizowania nagłówka żądania HTTP Uwaga: dalsze wystąpienia błędów analizy nagłówka HTTP będą rejestrowane na poziomie DEBUG: java.lang.IllegalArgumentException: Znaleziono nieprawidłową postać w docelowym żądaniu " – Sourabh

+0

Może mógłbyś użyć tego [rozwiązania] (https://stackoverflow.com/questions/18819180/ tomcat-7-0-43-info-error-parsing-http-request-header), ale nie jestem pewien, czy to pomoże, ponieważ nie wiem zbyt wiele o Javie. Również twoje żądanie AJAX działa dobrze teraz, musisz debugować problem z zaplecza/serwera. –

Odpowiedz

2

Zamiast RequestParam w sterowniku, należy użyć String. Ponieważ kiedy publikujemy dane JSON, nie przyjdzie ono jako indywidualne parametry w Żądaniu, zamiast tego zostanie odebrane jako Ciąg w kontrolerze. Kiedy już otrzymasz ciąg, skonwertuj go na obiekt JSON, a następnie uzyskaj odpowiednie wartości.

0

spróbuj usunąć typ zawartości i typ danych. Nie wysyłasz jsona, który powinien być parsowany w obiekcie, przesyłasz parametry kontrolera. Sposobem na to jest użycie obiektu w danych Ajax (tak jak ty), ale bez typu zawartości lub typu danych, które mówią "Wysyłam jeden parametr json"