2016-12-21 67 views
1

我在我的CodeIgniter系統中對存在的profile-url使用了jQuery驗證。早期它工作正常。但現在它不工作,我找不到錯誤。請檢查下面的代碼,並幫助我解決它。jQuery存在url驗證在Codeigniter中不起作用

HTML代碼

<div class="form-group padbtm20"> 
    <h5 class="control-label">Profile URL (Optional)</h5> 
    <div class="col-lg-12 prflinkdiv"> 
     <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12 leftmargnprofilelink"> 
     <input type="text" class="form-control" name="profileurl" minlength="4" maxlength="20" data-msg-required="Please enter your public username"> 
     </div> 
    </div> 
</div> 

jQuery代碼

$('form').validate({ 
rules: { 
    password: { 
     required: true 
     , minlength: 6 
     , maxlength: 20 
    }, 
    cfmPassword: { 
     equalTo: "#password" 
     , required: true 
     , minlength: 6 
     , maxlength: 20 
    }, 
    profileurl: { 
     remote: { 
      url: "http://localhost:8888/codeigniter/edit/username_exists", 
      type: "post", 
      data: 
       { 
        login: function() 
        { 
         return $('input[name="profileurl"]').val(); 
        } 
       } 
      }   
    } 
}, 
messages:{ 
    profileurl:{ 
     remote: jQuery.validator.format("{0} is already taken. Please try another one") 
    } 
} 
}); 

控制器 - > Edit.php

public function __construct() 
{ 
    parent::__construct(); 
    // error_reporting(E_ERROR | E_WARNING | E_PARSE); 
    $this->load->model('m_edit'); // load model 
} 

function username_exists() 
{ 
    $username = $this->input->post('profileurl'); 
    $query = $this->m_edit->username_exist($username); 
    $status ="true"; 

    if($query){ 
     $status = "false"; 
    } 
} 

模型 - > M_edit.php

function username_exist($username) 
{ 
    $this->db->select('prof_link'); 
    $this->db->from('register'); 
    $this->db->where('prof_link',$username); 

    $query = $this->db->get(); 
    $result = $query->result_array(); 
    return $result; 
} 
+0

我在html中沒有看到任何'form'標籤。 –

回答

1

你做需要的數據對象,因爲profileurl字段的值默認發送...

profileurl: { 
    remote: { 
     url: "http://localhost:8888/codeigniter/edit/username_exists", 
     type: "post" 
    }     
} 

必須echo來自服務器的JSON編碼字符串,"true"通過驗證, "false"未通過驗證,或者任何其他字符串將驗證失敗,其中字符串變爲錯誤消息。

function username_exists() 
{ 
    $username = $this->input->post('profileurl'); 
    $query = $this->m_edit->username_exist($username); 
    $status = "true"; 

    if ($query) 
    { 
     // $status = "false"; // default error message 
     $status = $username . " is already taken. Please try another one."; 
    } 

    echo json_encode($status); // <- tells validation to pass/fail 
} 

最後,如果你使用內置的CodeIgniter的CSRF安全,那麼你必須令牌隨着字段的值發送CSRF的價值。

profileurl: { 
    remote: { 
     url: "http://localhost:8888/codeigniter/edit/username_exists", 
     type: "post", 
     data: { // MUST send the CSRF Token Value 
      'csrftoken': function() { 
       return $('input[name="csrftoken"]').val(); 
      } 
     } 
    }     
} 

'csrftoken'必須匹配您的隱藏CSRF令牌場name

+0

感謝代碼工作。但我想知道爲什麼錯誤信息只顯示「false」。爲什麼這條消息不起作用?請幫助我用輸入數據顯示錯誤消息。 消息:{ profileurl:{ 遠程:jQuery.validator.format( 「{0}已被使用,請重新輸入。」) }} @ – user7152572

+0

user7152572,這是錯誤的做法。在這種情況下沒有參數,所以'{0}'不會被任何東西替換。正如我在回答中已經解釋的那樣,如果'echo'一個JSON編碼的字符串,驗證將失敗,並且該字符串將成爲錯誤消息。換句話說,自定義消息來自服務器。看到我編輯的答案。 – Sparky

+0

我做了自定義驗證我認爲會有一種方法來使用JS進行自定義驗證。無論如何感謝很多人。乾杯:) – user7152572