2011-01-28 82 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>