2014-11-14 33 views
0

我使用jQuery驗證來驗證我的形式,我的代碼是這樣的 -回調方法來獲取有效的參數

$('form#Register').validate({ 
     rules:{ 
      email:{ 
       required:true, 
       email:true, 
       remote:{ 
        url:"CheckEmail", 
        type:"post", 
        data:{ 
         email:function(){ 
          return $('input#email').val(); 
         } 
        } 
       } 
      },captcha:{ 
      required:true, 
      remote:{ 
       url:"CheckCaptcha", 
       type:"post", 
       data:{ 
        captcha:function(){ 
         return $('input#captcha').val(); 
        } 
       },success:function(data){ 
        if(data.validCaptcha){ 
         return true; 
        }else{ 
         return false; 
        } 
       } 
      } 
     } 
     } 
    }); 

如果郵件已經與應用程序或不regisgtered我檢查操作CheckEmail。並通過動作CheckCaptcha驗證驗證碼。這兩個網址都發生了相同的操作。其中有私人領域。

public class BaseAction { 
    private boolean validMail; 
    private boolean validCaptcha; 
    private String email; 
    private String captcha; 
--Getters and setters 
public String checkMail(){ 
     UserService uService = new UserServiceImpl(); 
     if(uService.getUserByEmailID(getEmail())!=null){ 
      setValidMail(false); 
     }else{ 
      setValidMail(true); 
     } 
     return success; 
    } 

    public String checkCaptcha(){ 
     HttpServletRequest request = ServletActionContext.getRequest(); 
     String captchaStored = (String)request.getSession().getAttribute("captcha"); 
     logger.info(captchaStored+" = "+getCaptcha()); 
     if(captchaStored!=null&&captchaStored.equals(getCaptcha())){ 
      setValidMail(true); 
     }else{ 
      setValidMail(false); 
     } 
     return success; 
    } 
} 

問題是jQuery驗證只能期待值真或假的反應,但我的行動給出了這樣的迴應 -

{"captcha":null,"email":"[email protected]","validCaptcha":false,"validMail":true} 

我認爲這是Struts動作的默認行爲返回的值全部私人財產。

現在的問題是 -

  1. 有沒有辦法告訴Struts動作,我想有效 驗證碼或validMail爲真或假的唯一價值。或

  2. jquery驗證中是否有任何回調函數,以便我可以進一步處理響應數據,並且可以檢查郵件或驗證碼,並告訴驗證程序它是有效的還是無效的。

回答

1

不要做這個客戶端...

success: function(data){ 
    if(data.validCaptcha){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

...因爲這已經由插件內部處理。

你只是應該輸出"false"(也undefinednull,或字符串)爲有效無效或"true"從你的服務器端腳本和remote將捕獲&自動處理的響應。

Documentation

服務器側資源經由jQuery.ajax(XMLHttpRequest的)稱爲和 得到對應於該驗證 元素的名稱和其作爲GET參數值的鍵/值對。所述響應評價爲 JSON和必須是true用於有效元素,並且可以是任何falseundefinednull爲無效元素,使用默認的消息;或 一個字符串,例如。 「該名稱已被佔用,請嘗試將peter123」改爲 顯示爲錯誤消息。

你也不需要data參數...

data:{ 
    captcha:function(){ 
     return $('input#captcha').val(); 
    } 
} 

......因爲#captcha字段的值已經由remote發送到你的服務器端腳本。data參數僅在需要發送附加數據以及此請求時使用。請參閱this example in the docs


這應該是你所需要的...

captcha: { 
    required: true, 
    remote: { 
     url: "CheckCaptcha", 
     type: "post" 
    } 
} 

報價OP

「是否有jQuery驗證任何回調函數,這樣我可以進一步處理響應數據,並可以自己檢查郵件或驗證碼的有效性,並告訴validat或者它是有效的或無效的。「

沒有理由這樣做。

  • 如果從服務器的響應是true,你告訴jQuery驗證字段是「有效的」。

  • 如果從服務器的響應是falsenullundefined或字符串,你告訴jQuery驗證字段是「無效的」。如果你返回一個字符串,它必須是JSON格式,它將成爲錯誤信息。

您需要修復您的服務器端代碼,使其符合此要求。否則,你不能使用jQuery Validate插件。


報價OP

「有沒有辦法告訴Struts動作,我想有效的驗證碼或validMail爲真或假的唯一價值。」

我不是Struts的專家,但不是return success,你嘗試過在你的服務器端代碼return truereturn false?在您的Struts操作中執行邏輯並返回適當的布爾值。

+0

我想你不明白我的問題,這個答案只說我的文檔中獲得或通過互聯網沒有回答我的問題 – 2014-11-19 11:47:24

+0

@RaviKumar,我猜你真的不明白我的答案或文檔,因爲您的OP中的代碼是錯誤的,我已經清楚地解釋了這一點。 **您不需要'data'或'success'參數,並且您的服務器端腳本*必須*返回一個布爾值或JSON字符串。**在進行這些修改之前,您的代碼將失敗。 – Sparky 2014-11-19 15:40:39

0

遠程:假

遠程錯誤信息可與遙控器時,僅是假的。

上述說明將起作用。這意味着當遙控器作爲響應得到錯誤時,它會顯示錯誤信息。 例如:如果電子郵件已存在,則檢查電子郵件唯一標識,然後返回錯誤原因,因爲輸入的電子郵件不適用於新用戶。如果數據庫中不存在電子郵件,則表示可用於新用戶返回true,原因是此時用戶名可用,因此不會顯示錯誤消息。

如果(checkEmailAvailable(字符串email)){

//如果電子郵件已經存在我。e不可用

return false; }

其他

{

迴歸真實;

}