2014-02-17 43 views
0

我正在使用jQuery Validation plugin(JVP)通過ajax執行服務器端驗證。除了一件事之外,一切都可以正常工作:JVP無法執行空白字段的遠程驗證。從async ajax請求返回值到jQuery驗證插件所需的方法

我不介意使用其默認規則required: true來進行具有簡單出現驗證的屬性。但是有時我的模型中有複雜的邏輯,我想保留在服務器端。

所以問題:我不能強制JVP通過他的內置遠程ajax方法來驗證空白字段。不過,我可以在他required方法使用功能(該功能應該得到真或假的結果):

required: function(element) { 
    return true_or_false; 
} 

所以我決定用這個函數內部異步Ajax請求,但我不能返回從AJAX異步的價值呼叫。我試圖使用回調,但無法使其工作,我堅持這個問題。這裏是我的代碼(CoffeeScript的):

validate_url = '/emails/validate' 

required_validate = (e, callback) -> 
    data = {} 
    data[e.name] = $(e).val() 
    $.ajax(
    url: validate_url 
    type: 'post' 
    dataType: 'json' 
    data: data 
    success: (response) -> 
     callback(response) 
) 

$('#my_form').validate(
    rules: 
    'email[email]': 
     required: (element) -> 
     required_validate(element, (response) -> 
      if response == true || response == "true" 
      false 
      else 
      true 
     ) 
) 

我檢查了所有數據,即進入到服務器並從它的響應 - 這是確定。 JVP的方法required不等待響應,並且一直得到true的問題。我怎樣才能返回他從success ajax請求的價值?

+0

響應是'真',我用斷點檢查'if response == true || response ==「true」'是'true'並且函數返回'false',但是已經太遲了''required'方法已經'true' –

+0

你是什麼意思「驗證空白字段」?你想要一個空白字段?如果它是空白的,爲什麼你需要服務器告訴你這個? – Sparky

回答

0

而不是編寫自己的異步驗證方法,請嘗試使用remote方法。

該文檔是here。關於此,請參閱other SO question

沿着這些線(對不起,我的CoffeeScript是一個生鏽)。您可能必須稍微嘮叨data選項以使其正確,但我認爲這是您需要做的一般想法。

$('#my_form').validate(
    rules: 
    'email[email]': 
    remote: 
     url: validate_url, 
     type: "post", 
     data: 
      email:() -> 
       $(".email_container").val() 
) 
+0

'remote'方法不會在空白字段上觸發,但我需要在服務器端驗證它們。 –

+0

爲什麼你需要服務器來驗證字段是否爲空?你是否可以在規則中添加'required',這樣就可以驗證它是否存在客戶端,然後可以在服務器上保留任何特殊的業務規則,以便通過'remote'方法進行檢查? 僅向服務器提出請求以驗證字段不爲空是非常低效的。 – arb

+0

嗯,它更多的是瞭解如何獲得這個值,比驗證空字段)) –