AJAX表单只显示成功消息或将数据发布到数据库而不是两者

时间:2013-07-21 13:43:03

标签: ajax forms codeigniter controller

我使用Codeigniter作为我的框架,并有一个简单的联系表单。这使用了表单助手,如果AJAX不存在,我使用了AJAX和控制器中的后备。

目前,我的代码只显示来自ajax表单的成功消息或将数据发布到数据库,具体取决于我是否在控制器中更改它们 - 我的错误消息正常工作。

我很困惑它不会发布和显示成功消息 - 我想我可能在我的控制器或AJAX请求中遗漏了一些东西?

这是我的代码作为指导,如果有人能发现任何可能很棒的东西,因为它现在让我感到紧张!

*我现在发布的代码可以将数据发布到数据库中。当我移动下面的帖子数据元素时 - > return $this->output->set_output(json_encode($respond)); It doesn't post to the database but shows the success message and vice versa.

CONTROLLER,

// if ajax request
        if($this->input->is_ajax_request()) {   
            $respond = array();
            if($this->form_validation->run() == FALSE) {
                $respond['result'] = 'false';

                $respond['error_message'] = $error_message;
                $respond['errors'] = validation_errors();

                // set individual errors - for warning classes
                $respond['first_name_error'] = form_error('first_name');
                $respond['country_error'] = form_error('country');
                $respond['email_error'] = form_error('email');
                $respond['message_error'] = form_error('message');

            } else {

                $respond['result'] = 'true';
                $respond['success_message'] = $success_message; 

                // add contact message to the database
                $this->contact_model->insert_contact_message($curr_lang, $this->input->post('first_name'), $this->input->post('country'), $this->input->post('email'), $this->input->post('phone'), $this->input->post('message'));
            }
            return $this->output->set_output(json_encode($respond));

        } else {
            // if ajax request failed - use CI
            if($this->form_validation->run() == FALSE) {

                $data['error_message'] =  $error_message;
                $data['errors'] = validation_errors();
            } else {
                // add contact message to the database
                $this->contact_model->insert_contact_message($curr_lang, $this->input->post('first_name'), $this->input->post('country'), $this->input->post('email'), $this->input->post('phone'), $this->input->post('message'));

                $data['success_message'] = $success_message;

            }
        }

        // set field labels
        $data['first_name'] = $first_name;
        $data['country'] = $country;
        $data['email'] = $email;
        $data['phone'] = $phone;
        $data['message'] = $message;

        // initialize view name
        $data['content'] = $page;

        // load the view
        $this->load->view('template', $data);
    } 

AJAX

$('#submit').click(function(e) {
        e.preventDefault();
        // send the form data to the controller
        $.ajax({
            url: $(this).attr('action'),
            type: 'POST',
            data: $('form').serialize(),
            dataType: 'json',
            success: function(respond) {
                if(respond.result === 'false'){
                    // function to add warning class
                    function add_error(response, field){
                        if(response){
                            $(field).addClass('warning');
                        }
                    }

                    // add warning classes - doing this individually as some inputs have more than one error message
                    add_error(respond.first_name_error, 'input[name="first_name"]');
                    add_error(respond.country_error, 'input[name="country"]');
                    add_error(respond.email_error, 'input[name="email"]');
                    add_error(respond.message_error, 'textarea');

                    // post all errors to the view
                    var error_msg = respond.error_message + respond.errors;
                    $('#error_message').html(error_msg);    

                }
                if(respond.result === 'true'){
                    // empty the form
                    $('#error_message').empty();
                    $('form').find("input[type=text], textarea").val('');

                    // set the success message
                    var success_msg = respond.success_message;
                    $('#success_message').html(success_msg).fadeOut(6000);                  
                }
            }     
        });
        return false;
    });

2 个答案:

答案 0 :(得分:0)

这很可能是因为你没有解析JSON响应所以你的if语句永远不会成为真(因为response.result可能正在评估'undefined')。

答案 1 :(得分:0)

在你的Ajax response.result === true或false not'true'或'false'。您只需要删除引号,因为它是布尔值而不是字符串。