CodeIgniter中的AJAX联系表格

问题描述:

几个问题:CodeIgniter中的AJAX联系表格

我正在使用CI和JQuery AJAX。

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

我已将AJAX“类型”更改为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接触形式,将是巨大的一个体面的例子。互联网上有各种各样的东西,但没有任何东西能打到所有的盒子。

感谢

+0

'数据:$(your_form_id).serialize(),'? – ifaour 2011-01-05 13:15:52

正如我在评论中写道,你并不需要设置一个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; 
    }); 
}); 
+0

所以'dataString'是严格的GET正确的?我想是有道理的。所以我只需要以标准CI方式访问表单变量中的数据? 'data:'变成了一个临时的POST数组?谢谢〜 – Ross 2011-01-05 20:32:55

+2

不,请阅读[$ .ajax](http://api.jquery.com/jQuery.ajax/),在使用$ .ajax时不要使用经典表单提交(表单更像是数据持有者,如果JS被禁用,则是后备)......浏览器正在向'url'提交任何您提供的内容,所以'data'用于'POST'和'GET'请求, serialize()正在做什么,只是节省了你的时间并为你准备了'dataString'! – ifaour 2011-01-05 21:00:01

如果使用jQuery的$.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