Проверка правильности формы php-codeigniter ajax

Привет, я довольно новичок в jquery -ajax, и я хотел бы помочь вам присоединиться к CI.

Я следил за этим руководством по отправке формы с помощью AJAX, и я хотел бы добавить эту функцию на сайт CodeIgniter. То, что я хотел бы сделать, – это когда пользователь отправляет форму, если есть какие-либо ошибки проверки, чтобы показывать индивидуально в каждом поле ввода (как в собственном процессе ci), или если это невозможно с помощью функции validation_errors (). Если ошибок не было, чтобы отобразить сообщение об успешном завершении над формой.

Вот мой код:

мой взгляд

// If validation succeeds then show a message like this, else show errors individually or in validation_errors() in a list <div class="alert alert-success">Success!</div> <?php echo validation_errors(); //show all errors that ajax returns here if not individualy ?> <?php echo form_open('admin/product/add, array('class' => 'ajax-form')); ?> <p> <label for="product_name">Product *</label> <input type="text" name="product_name" value="<?php echo set_value('product_name', $prod->product_name); ?>" /> <?php echo form_error('product_name'); ?> </p> <p> <label for="brand">Brand</label> <input type="text" name="brand" value="<?php echo set_value('brand', $prod->brand); ?>" /> <?php echo form_error('brand'); ?> </p> ... 

мой контроллер

  public function add($id){ // set validation rules in CI native $rules = $this->product_model->rules; $this->form_validation->set_rules($rules); if ($this->form_validation->run() === true) { // get post data and store them in db $data = $this->input_posts(array('product_name', 'brand', 'category_id', 'description')); $this->product_model->save($data, $id); // no errors - data stored - inform the user with display success-div } else { // validation failed - inform the user by showing the errors } //load the view $this->load->view('admin/products/add', $data); } 

и вот сценарий js

  $(document).ready(function () { $('form.ajax-form').on('submit', function() { var obj = $(this), // (*) references the current object/form each time url = obj.attr('action'), method = obj.attr('method'), data = {}; obj.find('[name]').each(function(index, value) { // console.log(value); var obj = $(this), name = obj.attr('name'), value = obj.val(); data[name] = value; }); $.ajax({ // see the (*) url: url, type: method, data: data, success: function(response) { console.log(response); // how to output success or the errors instead?? } }); return false; //disable refresh }); }); 

Как мне передать результаты проверки (либо успешные, либо сообщения об ошибках) через запрос ajax и отобразить их в моем представлении? Из небольшого исследования, которое я сделал, я обнаружил, что вы можете использовать один контроллер, который содержит как собственный процесс, так и запрос ajax (вместо использования 2 контроллеров), но моя основная трудность заключается в том, что я не понимаю, как результаты проверки будет проходить через js-скрипт и отображать их на моем представлении ?? Обратите внимание, что я не хочу отображать что-либо в окне предупреждения, вместо этого показывать результаты на div или индивидуальные ошибки (если это возможно).

EDIT Я внес некоторые изменения в свое приложение, вот код:

контроллер

 public function manage($id = NULL){ $this->load->library('form_validation'); $data['categ'] = $this->category_model->with_parents(); //fetch a single product or create(initialize inputs empty) a new one if (isset($id) === true) { $data['prod'] = $this->product_model->get($id); $data['attr'] = $this->attribute_model->get_by('product_id', $id, null, true); } else { $data['prod'] = $this->product_model->make_new(); $data['attr'] = $this->attribute_model_model->make_new(); } if (isset($_POST['general_settings'])) { if ($this->form_validation->run('product_rules') === true) { // get post inputs and store them in database $data = $this->product_model->input_posts(array('product_name', 'brand', 'category_id', 'general_description')); $this->product_model->save($data, $id); $status = true; } else { // validation failed $status = validation_errors(); } if ( $this->input->is_ajax_request() ) { echo json_encode($status); exit; } redirect('admin/product'); } //if (isset($_POST['attributes_settings'])) { the same thing here } // load the view $this->load->view('admin/products/manage', $data); } 

и js

 success: function(response) { //console.log(response); if (data.status === true) { $('#ajaxResults').addClass('alert alert-success').html(response); } else { $('#ajaxResults').addClass('alert alert-error').html(response); }; } 

Но у меня есть некоторые проблемы

  1. Хотя я получаю сообщения об ошибках от validation_errors () в качестве предупреждающей ошибки, когда ошибок нет, я получаю истинное значение в предупреждающей ошибке, вызванную предупреждением-успехом.

2. Как я должен вернуть сообщение об успешном завершении? например. сообщение «Сохранение было сделано!».

  1. Хотя в запросе, отличном от ajax, данные хранятся в базе данных, в случае, если fo ajax не хранится. Любые идеи Что может быть неправильно ???

HTML:

 <div id="ajaxResults"></div> 

Javascript ajax:

  success: function(response) { $('#ajaxResults').text(response); } 

этот скрипт, который вы написали, только в том случае, если проверка прошла успешно, не так ли?

Неправильно. Код в «успехе» выполняется в любое время, когда вы получаете ответ с сервера (при условии, что HTTP-заголовок равен 200). Ваш javascript знает, есть ли у сервера какая-либо ошибка для вас? Нет.

Вам нужен ваш JavaScript, чтобы узнать, не прошла или не прошла валидация. У вас есть много способов сделать это. Одной из них может быть отправка сообщения для отображения, за которым следует 0 или 1.

Таким образом, ваш PHP будет выглядеть так:

 return "0 " . $errorMessage; 

а также

 return "1 " . $successMessage; 

и ваш javascript должен затем распознать с помощью оператора if и substring , если сообщение начинается с 0 или с 1.

Используйте этот способ, я надеюсь, что это сработает для вас

 <script type='text/javascript'> var base_url = '<?=base_url()?>'; function ajax_call() { var ids = $("#all_users").val(); $.ajax({ type:"POST", url: base_url+"expense/home/get_expense", data: "userid=" + ids, success: function(result){ $("#your_div_id").html(result); } }); } </script>