2017-09-15 89 views
6

我想在創建更改密碼頁時驗證用戶名和其他字段。問題是AJAX調用JQuery腳本沒有擊中我的controller.i嘗試給硬編碼路徑也在ajax請求的url字段中。 以下是我的腳本JQuery/AJAX調用沒有擊中Spring MVC控制器

此checkUname函數正在onblur事件上從一個輸入字段觸發。

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

這是我的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

我沒有有關Java代碼的想法,但AJAX請求具有'type:「POST」'而它應該是'method:「POST」' –

+0

我按照您的建議進行了更改,但現在它們獲取「INFO:Error解析HTTP請求標頭 注意:進一步發生HTTP頭解析錯誤將在DEBUG級別記錄。 java.lang.IllegalArgumentException:在請求目標中找到無效字符「 – Sourabh

+0

也許你可以使用這個[解決方案](https://stackoverflow.com/questions/18819180/ tomcat-7-0-43-info-error-parsing-http-request-header),但我不確定它是否會有幫助,因爲我對Java不太瞭解。此外,您的AJAX請求現在工作正常,您必須從後端/服務器調試問題。 –

回答

2

而不是在控制器使用RequestParam的,你應該使用字符串。因爲當我們發佈JSON數據時,它不會作爲Request中的單個參數出現,而是會在您的控制器中以字符串形式接收。一旦你得到的字符串將其轉換爲JSON對象,然後相應地獲取您的值。

0

嘗試刪除內容類型和數據類型。 你沒有發送應該在對象中解析的json,你正在發送控制器的參數。 這樣做的方式是在Ajax的數據中使用一個對象(如你所做的那樣),但是沒有內容類型或數據類型,它們說「我發送一個json參數」

相關問題