0

我使用 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.

控制器,

// 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;
    });
4

2 回答 2

0

这可能是因为您没有解析 JSON 响应,因此您的 if 语句永远不会为真(因为 response.result 可能评估为“未定义”)。

于 2013-07-21T13:47:20.303 回答
0

在您的 Ajax respond.result === true 或 false 中,不是“true”或“false”。您只需要删除引号,因为它是布尔值而不是字符串。

于 2013-10-02T17:14:56.873 回答