2016-12-21 11 views
1

私はCodeIgniterシステム内に存在するprofile-urlに対してjQuery検証を使用しています。早くそれは正常に働いていた。しかし、今はそれが動作していない私はエラーを見つけることができませんでした。以下のコードを確認して修正してください。jQueryが存在するかどうかの確認は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") 
    } 
} 
}); 

Controller->个人设定

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

ありがとうコードが動作しています。しかし、なぜ私はエラーメッセージが "偽"だけを表示するのか知りたいです。なぜこのメッセージの部分がうまくいかないのですか?入力データのエラーメッセージを表示するのを手伝ってください。 メッセージ:{ profileurl:{ リモート:jQuery.validator.formatは( "{0}は既に取られている別のものを試してみてください") }} – user7152572

+0

user7152572 @は、それは間違ったアプローチです。この場合はパラメータがないので、 '{0}'は何にも置き換えられません。私の答えですでに説明したように、JSONでエンコードされた文字列を 'echo 'すると、検証は失敗し、文字列はエラーメッセージになります。つまり、カスタムメッセージはサーバーから送信されます。私の編集された答えを見てください。 – Sparky

+0

JSを使ってカスタム検証を行う方法があると私は考えていました。とにかくたくさんの人に感謝します。乾杯:) – user7152572

関連する問題