помогите codeigniter и ajax - PullRequest
       2

помогите codeigniter и ajax

0 голосов
/ 30 сентября 2010

У меня есть форма, в которой разделы скрыты до тех пор, пока не будет передан правильный фрагмент данных.Я хочу сделать это через JQuery и AJAX.Я надеялся, что смогу показать следующий элемент в форме, если последний элемент введен в базу данных нормально, в настоящее время мой контроллер выглядит следующим образом:

function add_career() {
    $data = array();
    $this->load->model('admin_model');
    $this->load->library('form_validation');

        if($this->input->post('career_set') == 'Save') {

            $this->form_validation->set_rules('career_name', 'Career name', 'required|min_length[3]');
            $this->form_validation->set_rules('career_desc', 'Career description', 'required|max_length[3000]');
            $this->form_validation->set_rules('useful_info', 'Useful Information', 'max_length[1000]');
            $this->form_validation->set_rules('useful_links', 'Useful Links', 'max_length[1000]');
            if ($this->form_validation->run() == FALSE) {
               $this->template->build('admin/add_career'); 
            } else {
               if($this->input->post('degree_needed')) {
                   $degree_needed = 'Yes';
               } else {
                   $degree_needed = 'No';
               }

               $this->load->model('careers');
               $insertCareer = $this->careers->save(
                 $this->input->post('career_name'),
                 $this->input->post('career_desc'),
                 $degree_needed,
                 $this->input->post('useful_info'),
                 $this->input->post('useful_links')
               );

               $insertCareer['career_id'] = $this->db->insert_id();

               //save the data in the session, so we can to it if need be
                $this->session->set_userdata(array('career' => $insertCareer));
                $this->firephp->log($this->session->userdata);    
               }

        }
        $careerData = $this->session->userdata('career');
        if($this->input->post('salary_set') == 'Save') {
                $this->form_validation->set_rules('basic_salary', 'Basic salary', 'required|max_length[12]');
                $this->form_validation->set_rules('trained_salary', 'Fully trained salary', 'required|max_length[12]');
                $this->form_validation->set_rules('progressed_salary', 'Progressing onto salary', 'required|max_length[12]');
                $this->form_validation->set_rules('average_salary', 'Average salary', 'required|max_length[12]');

                if ($this->form_validation->run() == FALSE) {
                        $this->template->build('admin/add_career'); 
                } else {
                    $this->load->model('salaries');
                    $insertSalary = $this->salaries->save(
                        $this->input->post('basic_salary'),
                        $this->input->post('trained_salary'),
                        $this->input->post('progressed_salary'),
                        $this->input->post('average_salary'),
                        $careerData['career_id']
                    );

                $this->session->set_userdata(array('salary' => $insertSalary));
                $this->firephp->log($this->session->userdata);    
                }
        }

        if($this->input->post('course_grades_set') == 'Save') {
            //first off we need to save the grade details

            $this->load->model('grades');
            $this->load->model('course');
            $this->firephp->log(count($_POST['grade_desc']));

            foreach ($_POST['grade_desc'] as $k => $v) {
                $this->firephp->log($v, 'Looped Results');
                $insertGrade = $this->grades->save($v, $careerData['career_id']);
                // theorertically we should be able to save the assicated course at the same time using $k
                $insertCourse = $this->course->save(
                    $_POST['course_type'][$k],
                    $_POST['course_names'][$k], 
                    $_POST['course_links'][$k],
                    $this->db->insert_id()
                );
                $this->firephp->log($insertGrade, $k);
                $this->firephp->log($insertCourse, $k);
            }
            //$insertGrades = $this->grades->save()
            //);
        }




   $this->template->build('admin/add_career', $data);
}

Мне в основном нужен мой ajax, чтобы проверить, чтопоследние данные были отправлены в базу данных в порядке, а затем изменить отображение нет в следующей форме для отображения блока?Это все возможно?Как мне проверить, что данные были успешно сохранены, прежде чем показывать следующий шаг формы.

Ответы [ 3 ]

0 голосов
/ 01 октября 2010

Вы не должны возвращать представление в add_career (), если хотите позже изменить его с помощью jQuery.

Вы должны вернуть результат функции save (), если она возвращает

$this->db->affected_rows() >= 0;

тогда вы можете проверить текст ответа и делать то, что вы хотите оттуда ...

ПРИМЕЧАНИЕ: Я бы предпочел вернуть файл XML и использовать этот подход:

$.ajax({
    url: "the/path/to/the/function/",
    type: 'POST',
    dataType: 'xml',
    data: $('#your_form').serialize(),
    timeout: 15000,
    error: function(){

    },
    success: function(xml){
        //and away we go....
    }
});
0 голосов
/ 12 апреля 2012

Доступно очень простое решение. Сначала разделите ваши разделы на div.Часть, которая отображается в данный момент, устанавливает значение 1, используя скрытое поле ввода.Присвойте скрытые поля всем блокам div и установите их значения равными 0. Присвойте класс всем входным полям.Когда Ajax запущен и ответ успешен. Сделайте это. Эта часть скрывает текущий div.

$('.class_name').click(function(){
         var value = $(this).val();
         if(value == 1){
              $(this).val() = 0;
              $(this).parent().hide();
         }else{
              $(this).parent().siblings('div').find('input').val() = 1;  
         }
});
0 голосов
/ 30 сентября 2010

Краткий ответ: да, это все возможно. Как?

Первая часть JQuery

Вы можете использовать jQuery так же, как и любой другой (не фреймворк) сайт. Ваш URL в функции $. Post () будет выглядеть следующим образом.

$.post(
    'http://example.com/index.php/controller/function_name",
    {key1:value1,key2:value2},
    function(data){
        //function to execute when return data received from 'function_name' in url
        //this is where you would show the next step of the form
    },
    type of data being returned(html, json)
    );

Проверочная часть

Я полагаю, у вас есть несколько вариантов. Одним из них является то, что вы можете отправить свои данные в функцию контроллера, которая затем работает с моделью или базой данных. Затем вы можете извлечь последнюю вставленную строку и посмотреть, соответствует ли она вашим отправленным данным в той же функции контроллера. Проверьте этот вопрос: Выберите идентификатор последней вставки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...