2014-09-03 91 views
-1

當遠程調用返回true時,我需要防止表單提交。我怎樣才能做到這一點?jQuery驗證 - 防止在遠程提交

的JS代碼:

var userForm = $('#user-form'); 

userForm.validate({ 
    rules : { 
     email : { 
      email: true, 
      remote: { 
       url: userForm.find('#uniqueUrl').val() + '/isUniqueEmail', 
       type: 'POST', 
       data: function(){ 
        return $('#email').val() 
       }, 
       complete: function(data){ 
        if(data.responseText.trim() == 'true'){ 
         return false; 
        } 
       } 
      } 
     } 
    } 
}); 

服務器端:

public function isUniqueEmail() 
    { 
     $result = $this->users->isUniqueEmail($this->input->post('email')); 

     if($result): 
      echo false; 
     else: 
      echo true; 
     endif; 
    } 
+0

你問它是如何設計的工作完全相反。如果你想阻止提交,你會從服務器發送一個「false」。 ***爲什麼你想要這樣做?來自服務器的「真實」響應應該表明它「通過」了驗證。你真的只是想壓制錯誤信息嗎? – Sparky 2014-09-03 17:08:33

+0

僅供參考,您不需要'data'選項,因爲該字段的值已經默認發送。 – Sparky 2014-09-03 17:09:22

+0

我從服務器返回「真」或「假」作爲字符串(回顯結果)。我應該返回布爾值? – Sasha 2014-09-03 17:11:39

回答

1

報價OP

「我需要去防止從提交時,遠程調用返回結果爲真「。

這是倒退。您將返回false以阻止提交併觸發驗證消息。

由於插件默認發送字段值,因此不需要data選項。您也不需要complete選項,因爲插件會自動捕獲服務器響應。


JavaScript的:

var userForm = $('#user-form'); 
userForm.validate({ 
    rules: { 
     email: { 
      email: true, 
      remote: { 
       url: userForm.find('#uniqueUrl').val() + '/isUniqueEmail', 
       type: 'POST' // default is GET 
      } 
     } 
    } 
}); 

服務器端:

public function isUniqueEmail() 
{ 
    $result = $this->users->isUniqueEmail($this->input->post('email')); 

    if($result): 
     // setting message in PHP allows you to dynamically have any message 
     echo json_encode('name is already taken'); 
    else: 
     echo true; 
    endif; 
} 

交替

(自定義錯誤消息在JavaScript中設定)

的JavaScript:

var userForm = $('#user-form'); 
userForm.validate({ 
    rules: { 
     email: { 
      email: true, 
      remote: { 
       url: userForm.find('#uniqueUrl').val() + '/isUniqueEmail', 
       type: 'POST' // default is GET 
      } 
     } 
    }, 
    messages: { 
     email: { 
      remote: "name is already taken" 
     } 
    } 
}); 

服務器端:

public function isUniqueEmail() 
{ 
    $result = $this->users->isUniqueEmail($this->input->post('email')); 

    if($result): 
     echo false; 
    else: 
     echo true; 
    endif; 
} 

資料http://jqueryvalidation.org/remote-method/