codeigniter и ajax контактная форма - PullRequest
1 голос
/ 29 января 2011

Я пытаюсь использовать ajax в моей контактной форме в приложении codeigniter.У меня это там, где делается вызов ajax, но никакие данные поста не отправляются на сервер.Я не могу понять, почему.Пожалуйста, помогите.

У меня есть некоторые возвращения, но они ничего не делают.Кроме того, $ this-> input-> post ('name') имеет значение null.

Вид формы

<?php
                    echo form_open('welcome/submit_contact');

                    echo form_error('name');
                    echo form_label('Name', 'name'"');
                    echo form_input('name', set_value('name'), 'id="name);

                    echo form_error('email');
                    echo form_label('Email', 'email');
                    echo form_input('email', set_value('email'), 'id="email"');

                    echo form_error('phone');
                    echo form_label('Phone', 'phone');
                    echo form_input('phone', set_value('phone'), 'id="phone"');
                    #echo '<h5>Do not start with "1" and no dashes.</h5>';

                    echo form_error('message');
                    echo form_label('Message', 'message');
                    echo form_textarea('message', set_value('message'), 'id="message"');

                    $submitData = array(
                        'name'  => 'submit',
                        'value' => 'Submit',
                        'id'    => 'button'

                    );
                    echo form_submit($submitData);

                    echo form_close();
                ?>
                <script type="text/javascript">

                $(function() {

                    $('form').click(function() {

                        // get the form values
                        var form_data = {
                            name: $('#name').val(),
                            email: $('#email').val(),
                            message: $('#message').val()
                        };

                        // send the form data to the controller
                        $.ajax({
                            url: "<?php echo site_url('welcome/submit_contact'); ?>",
                            type: "post",
                            data: form_data,
                            success: function(msg) {
                                $('form').prepend('<h5 class="good">Message sent!</h5>');
                                $('h5.good').delay(3000).fadeOut(500);
                                alert(msg);
                            }
                        });

                        // prevents from refreshing the page
                        return false;   
                    });
                });
                </script>

Функция контроллера

function submit_contact()
    {
        $this->load->library('form_validation');
        $this->form_validation->set_error_delimiters('<h4 class="bad">', '</h4>');

        $name = $this->input->post('name');
        echo "name = ".$name;

        $this->form_validation->set_rules('name', 'Name', 'trim|required|alpha_dash|xss_clean');
        $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email|xss_clean');
        $this->form_validation->set_rules('phone', 'Phone' , 'trim|integer|exact_length[10]|xss_clean');
        $this->form_validation->set_rules('message', 'Message', 'trim|required|max_length[1000]|xss_clean');

        // there are validation errors
        if($this->form_validation->run() == FALSE)
        {
            return "error";
        }
        else // there are no validation errors
        {
            /*************************
            need to actually send the email 
            *************************/
            return null;
        }

    }

РЕДАКТИРОВАТЬ: I 'Я обновил код в моем вопросе.По сути, теперь, если есть ошибки проверки, как я могу их отобразить в форме?Я предполагаю, что я верну значение из моего контроллера, а затем получу утверждение в моем успехе ajax, что если msg == "error", отобразить ошибки, иначе msg == null, отобразить сообщение об успехе.Но как бы я сказал, чтобы мое мнение отображало эти ошибки на основе переменной успеха ajax?

1 Ответ

3 голосов
/ 29 января 2011

я думаю, что вы должны поставить id на входе, а textarea не на метке, т.е.

$data = array
(
   "name"=>'message',
   "value"=>'message',
   "id"=>'message'
)


form_textarea($data);

если вы установите id на метке, то jquery ничего не поймет из того, что вставил пользователь, а также выиграла проверка codeigniterне работает правильно.Вот почему ваш пост будет иметь значение NULL

то же самое для другого поля ввода

EDIT

вы запрашиваете данные через ajax, так что верните хорошийОбъект json (сначала удалите все отладочные отпечатки):

// there are validation errors
if($this->form_validation->run() == FALSE)
{
    echo(json_encode("validate"=>FALSE));
}
else // there are no validation errors
{
    /*************************
    need to actually send the email, then send you mail 
    *************************/
    echo(json_encode("validate"=>TRUE));
}

, а затем протестируйте его в функции успеха ajax для отображения положительного или отрицательного сообщения

 <script type="text/javascript">

        $(function() {

            $('form').click(function() {

                // get the form values
                var form_data = {
                    name: $('#name').val(),
                    email: $('#email').val(),
                    message: $('#message').val()
                };

                // send the form data to the controller
                $.ajax({
                    url: "<?php echo site_url('welcome/submit_contact'); ?>",
                    type: "post",
                    data: form_data,
                    dataType: "json"
                    success: function(msg)
                    {
                        if(msg.validate)
                        {
                           $('form').prepend('<h5 class="good">Message sent!</h5>');
                           $('h5.good').delay(3000).fadeOut(500);
                        }
                        else
                           //display error
                    }
                });

                // prevents from refreshing the page
                return false;   
            });
        });
        </script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...