CodeIgniter中的AJAX联系表单

时间:2011-01-05 12:49:42

标签: jquery ajax codeigniter contact-form

几个问题:

我正在使用CI和JQuery AJAX。

在下面的代码中,我汇编了dataString,默认情况下会将其作为查询字符串附加到网址。

我已将AJAX“type”更改为POST,所以我的问题是 - 如何在我的CI应用中访问dataString

似乎我仍然需要使用

$name=$this->input->post('name')

对我而言,设置dataString是多余的?

-

我尝试过搜索,却找不到具体的东西。

是否仍然可以使用CI验证库和AJAX?

if($this->form_validation->run() == FALSE)
{
    // what can i return so that my CI app shows errors?
}

通常,您会重新加载联系表单或重定向用户。在理想的世界中,我希望将错误消息显示给用户。

Jquery的:

    $(document).ready(function($){
        $("#submit_btn").click(function(){
            var name = $("input#name").val();
            var company = $("input#company").val();
            var email = $("input#email").val();
            var phone = $("input#phone").val();
            var message = $("textarea#message").val();
            var dataString = 'name=' +  name + '&message=' + message + '&return_email=' + email + '&return_phone=' +
            phone + '&company=' + company;
            var response = $.ajax({
                type: "POST",
                url: "newsite/contact_ajax/",
                data: dataString
            }).responseText;

            //$('#contact').hide();
            //$('#contact').html('<h5>Form submitted!  Thank you!</h5><h4>We will be in touch with you soon.</h4>');
            //$('#contact').fadeIn('slow');
            return false;
        });  
    });

希望我已经足够清楚 - 如果有人有一个很好的CI联系表格的好例子。互联网上有各种各样的东西,但没有什么可以打到所有的盒子。

感谢

2 个答案:

答案 0 :(得分:4)

正如我在评论中所写,你不需要设置dataString,因为jQuery可以为你做到:

$(document).ready(function($){
    $("#submit_btn").click(function(){
        var response = $.ajax({
            type: "POST",
            url: "newsite/contact_ajax/",
            data: $(your_form_id).serialize()
        }).responseText;

        //$('#contact').hide();
        //$('#contact').html('<h5>Form submitted!  Thank you!</h5><h4>We will be in touch with you soon.</h4>');
        //$('#contact').fadeIn('slow');
        return false;
    });  
});

答案 1 :(得分:3)

如果您使用jQuery $.post()函数,则可以显式命名post变量,然后按照您在问题中建议的方式在控制器中访问它们。

 $.post("<?php echo site_url("newsite/contact_ajax/";?>",
        {my_name:name,my_company:company,my_email:email,my_phone:phone,my_message:message},
        function(){
              //callback function
         },    
         html
      );

在你的控制器中:

$this->input->post('my_name');
$this->input->post('my_company');
//etc