2011-01-28 94 views
1

我想在codeigniter应用程序中使用我的联系表单中的ajax。我把它发到ajax调用的地方,但是没有发送数据到服务器。我无法弄清楚为什么。请帮忙。codeigniter和ajax联系表格

我确实有一些回报,但他们什么都不做。此外,$ this-> input-> post('name')为空。

表单视图

<?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; 
     } 

    } 

编辑:我已经更新了我的问题的代码。基本上现在如果有验证错误,我将如何让他们在窗体上显示?我假设我会从我的控制器返回一个值,然后在我的ajax成功中有一个声明,如果msg ==“error”显示错误elseif msg == null,则显示成功消息。但是,我如何告诉我的视图基于ajax成功变量显示这些错误?

+0

什么是额外的“做这一行?回声form_label('名称','名称'''); – Brad 2011-01-30 02:45:54

+0

你的名字为空,因为这个回声form_input('name',set_value('name'),'id =“name); 您的ID =“名称未关闭” – Brad 2011-01-30 02:51:45

回答

3

我想你应该把ID输入和textarea的不是标签上即

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


form_textarea($data); 

,如果你设置的标签上的ID,然后jQuery将拿起从用户插入的任何操作,也笨验证赢得” t正常工作。这就是为什么你的帖子结果为NULL

同其他输入字段

编辑

你要求通过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)); 
} 

然后测试它在你的阿贾克斯成功函数来显示正面或负面的消息

<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>