2017-09-15 1 views
6

Ich versuche, Benutzernamen und andere Felder zu überprüfen, während eine Änderung Passwort Seite erstellen.Das Problem ist AJAX Aufruf in Jquery Skript trifft nicht mein Controller.Ich versuchte geben hart codierten Pfad auch im URL-Feld der Ajax-Anfrage. Unten ist mein SkriptJQuery/AJAX Anruf schlägt nicht Spring MVC Controller

Diese Funktion checkUname löst Onblur-Ereignis aus einem der Eingabefelder aus.

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

Das ist mein MVC-Controller

@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

habe ich nicht Idee über Java-Code, aber AJAX-Anfrage hat 'Typ:" POST "' während es sollte 'Methode:" POST "' –

+0

Ich habe Änderungen vorgenommen, wie Sie vorgeschlagen, aber jetzt bekommen "INFO: Fehler beim Analysieren HTTP-Anfrage Header Hinweis: weiter Vorkommen von HTTP-Header-Parsing-Fehlern werden auf DEBUG-Ebene protokolliert. java.lang.IllegalArgumentException: Ungültiges Zeichen im Anforderungsziel gefunden " – Sourabh

+0

Vielleicht könnten Sie dies verwenden [Lösung] (https://stackoverflow.com/questions/18819180/ tomcat-7-0-43-info-error-parsing-http-request-header) aber ich bin mir nicht sicher, ob es helfen wird, da ich nicht viel über Java weiß. Auch Ihre AJAX-Anfrage funktioniert jetzt gut, Sie müssen das Problem von Backend/Server debuggen. –

Antwort

2

Anstelle der Verwendung von RequestParam in der Steuerung ist, sollten Sie String verwenden. Denn wenn wir JSON-Daten veröffentlichen, werden sie nicht als einzelne Parameter in Request angezeigt, sondern als String in Ihrem Controller. Sobald Sie die Zeichenfolge erhalten, konvertieren Sie sie in JSON-Objekt und dann erhalten Sie Ihre Werte entsprechend.

0

versuchen, Content-Typ und Datentyp zu entfernen. Sie senden keinen JSON, der in einem Objekt geparst werden soll, Sie senden Controller-Parameter. Der Weg, um dies zu tun ist mit einem Objekt in den Ajax Daten (wie Sie), aber ohne den Content-Typ oder Datentyp, dass "Ich sende einen Json-Parameter"

Verwandte Themen