#php #ajax #codeigniter #validation
#php #ajax #codeigniter #проверка
Вопрос:
Я не понимаю, почему я не получаю ошибок, когда я оставил пустые входные данные в своей форме. Я использую проверку формы в первый раз, и я действительно смущен тем, как это способ отправки проверки формы с помощью AJAX.
Я использую файл, вызываемый form_validation.php
по моему application/config
пути, как описано на веб-странице codeigniter, чтобы установить правила проверки каждого ввода в моем приложении. Я уже включил помощник формы и form_validation
библиотеку autoload.php
. В представлении формы я пытаюсь напечатать ошибки validation_errors()
, но ничего не происходит.
Вот мой код:
ФОРМА
<?php echo form_open(null,array("class"=>"col s12","id"=>"enter_form"));?>
<div class="row">
<div class="col s4">
<span style="position:static;" class="badge yellow">Importante!!!</span>
<blockquote>
Si es primera vez que ingresas a votar, debes ingresar un correo y una contraseña, que te identifique como usuario.
Si ya te encuentras registrado, ingresa los mismos datos usados la primera vez que ingresaste, para realizar tu inicio de sesion.
</blockquote>
</div>
<div class="col s8">
<?php
$errors= validation_errors('<li>','</li>');
if($errors != ""){
?>
<div class="red lighten-2">
<ul>
<?php echo $errors;?>
</ul>
</div>
<?php
}
?>
<div class="row">
<div class="input-field col s6 offset-s3">
<input id="enter_email" type="email" name="enter_email" class="validate">
<label for="enter_email">Correo</label>
</div>
</div>
<div class="row">
<div class="input-field col s6 offset-s3">
<input id="u" name="enter_password" type="password" class="validate">
<label for="enter_password">Contraseña</label>
</div>
</div>
<input type="hidden" name="update_politic_hide" id="update_politic_hdn" value="">
</div>
</div>
<div class="modal-footer" style="position:fixed !important;">
<div class="col s6 push-s5">
<button class="center-align btn waves-effect waves-light light-blue darken-4" type="submit" name="action" id="enter_submit">A votar!</button>
</div>
</div>
<?php echo form_close();?>
КОНТРОЛЛЕР
public function verification()
{
$this->load->model("votes");
if ($this->input->is_ajax_request()) {
if ($this->form_validation->run('enter_form')) {
//some code
}
//else should display validation_errors() on form view
$params["email"] = $this->input->post('enter_email');
$params["password"] = $this->input->post('enter_password');
$result = $this->votes->verification($params);
if ($result==null) {
$params["status"]= 0;
$success= $this->votes->user_record($params);
return $success;
}
else {
$params["status"]= 1;
$success= $this->votes->user_record($params);
return $success;
}
}
}
JAVASCRIPT
$("#enter_form").submit(function(event) {
event.preventDefault();
var data = $(this).serialize();
alert(data);
$.post(baseurl "votos/verification",
data,
function(data) {
if (data == 1) {
alert("registrado");
}
else {
alert("No estabas registrado, ahora si");
}
}
);
});
FORM_VALIDATION.PHP (правила ввода)
'enter_form'
=> array(
array('field' => 'enter_email','label' => 'Email','rules' => 'required|is_string|valid_email'),
array('field' => 'enter_password','label' => 'Password','rules' => 'required|is_string'),
),
Ответ №1:
Это потому, что вы отправляете форму через ajax-запрос. Этот код не запускается после отправки формы.
$errors= validation_errors('<li>','</li>');
if($errors != ""){
?>
<div class="red lighten-2">
<ul>
<?php echo $errors;?>
</ul>
</div>
<?php
}
Вы должны перехватывать ошибки на сервере и отправлять их обратно следующим образом:
if ($this->form_validation->run('enter_form') === true) {
//some code
}else{
$errors = validation_errors();
echo json_encode(array("success"=>false, "message"=>$errors));
die();
}
Затем в обратном вызове ajax вы помещаете сообщение в div и отображаете их.
Комментарии:
1. Когда я пытаюсь выполнить data.message в функции ajax… Я получаю undefined, но когда я печатаю данные в оповещении … он показывает все сообщения… =( помогите, пожалуйста!! я действительно новичок в jquery
2. Вы получаете ответ, закодированный в формате json, поэтому вы должны декодировать его data = $.parseJSON(data); Также вам нужно закодировать ответ на случай, если он пройдет проверку, чтобы вы всегда получали действительный ответ json от сервера.