2010-06-25 78 views
0

我想問,爲什麼使用本機ajax的ajax請求的響應不會發布或返回我的整個頁面?有什麼我應該知道的嗎?我查看了jquery.com上的文檔,沒有提到類似的東西,除非我在看別的地方。我可以得到任何幫助,爲什麼這種事情繼續發生?jquery ajax codeigniter

這是處理有問題表單驗證的函數。

function showsupport() 
{ 
    $this->form_validation->set_rules('supportername','Your Name','trim|required|max_length[20]|xss_clean'); 
    $this->form_validation->set_rules('supporteremail','Email Address','trim|required|valid_email|xss_clean'); 
    $this->form_validation->set_rules('pledgedate','Pledge Date','trim|required|xss_clean'); 
    $this->form_validation->set_rules('messagetxt','Your Message','trim|required|xss_clean'); 

    if($this->form_validation->run() == FALSE) 
    { 
     echo validation_errors(); 
    } else { 

     $this->load->model('support_m'); 
     $name = $this->input->post('supportername'); 
     $email = $this->input->post('supporteremail'); 
     $date = $this->input->post('pledgedate'); 
     $msg = $this->input->post('messagetxt'); 

     $qry = $this->support_m->storepledge($name,$email,$date,$msg); 

     if($qry){ 
     //$this->template->write_view('content','thanks'); 
     //$this->template->render(); 
     $datamsg['supportmsg'] = 'Message Added Successfully'; 
     }else{ 
      echo 'There was an error inserting into db'; 
     } 
    } 
} 

這與產生的表格的圖。

<?php 
            $formdata = array('id'=>'suppform'); 
            echo form_open('homepage/showsupport',$formdata); 

            $namedata = array('name'=>'supportname','id'=>'supportname','size'=>'30','max_length'=>'25','value'=>set_value('supportname')); 
            echo '<label for="supportername">Your Name:'.form_input($namedata).'</label><br /><br />'; 
            $emaildata = array('name'=>'supporteremail','id'=>'supporteremail','size'=>'30','max_lenth'=>'25','value'=>set_value('suppoteremail')); 
            echo '<label for="supporteremail">Email Address:'.form_input($emaildata).'</label><br /><br />'; 
            $pledgedata = array('name'=>'pledgedate','id'=>'pledgedate','size'=>'30','max_length'=>'20','value'=>set_value('pledgedate')); 
            echo '<label for="pledgedate">Today\'s Date:'.form_input($pledgedata).'</label><br /><br />'; 
            $msgdata = array('name'=>'messagetxt','id'=>'messagetxt','col'=>'2','rows'=>'8'); 
            echo '<label for="messagetext">Your Pledge:'.form_textarea($msgdata).'</label><br />'; 
            $submitdata = array('name'=>'submitbtn','id'=>'submitbtn','value'=>'Send'); 
            echo '<label for="submitbutton">'.form_submit($submitdata).'</label><br />'; 

            echo form_close(); 
           ?> 
      </div> 
     <div id="errorsechoed"><?php echo validation_errors();?></div> 

的retured頁面的HTML在div傾倒#errorsechoed

$('#suppform').submit(function(eve){ 
     eve.preventDefault(); 
    $.ajax({ 
    type: 'POST', 
      cache: false, 
    url: 'homepage/showsupport', 
    data: $('#suppform').serialize(), 
    beforeSend: function(){ 
       $('#supportform').block({message:'<h4> Processing...</h4>'}) 
    }, 
    complete: function(){ 

    }, 
    success: function(html){ 
       $('#errorsechoed').text(html); 
    } 

      }); 
}); 

我一直試圖讓這個想通了,我想我已經取得了一些進展,這裏是我有:

a)William Colin的模板庫在指定區域的情況下工作,因此只有特定區域會一直刷新,而不是唯一的頁面。因此,它的工作方式與其他的codeigniter標準設置有所不同。這肯定會阻礙jquery從服務器獲取響應。它獲取模板庫(即區域)的位並將其渲染,最終重新構建整個頁面。

B)當您運行form_validation庫,模板不允許你只需要加載一個視圖以正常的方式在笨,而你通過運行做到這一點:

$this->template->write_view('contentregion','viewname'); //writes the view 

$這個 - >模板 - >渲染(); //在屏幕上呈現視圖。

所以如果在驗證失敗的情況下沒有這樣做,那麼formvalidation庫吐出的錯誤消息就好像看不到視圖。

我已經嘗試了很多使用該庫的函數的排列,並且仍然只能渲染出我網站的另一個頁面。困惑

結論:

我覺得這個模板庫是偉大的,但它需要一些更新,使得這些問題得到滿足。當我必須做一個需要很多Ajax的站點時,我將不得不查看其他模板系統。希望威廉先生能看到這一點,並幫助研究這一點。

感謝社區大道說出我學到的東西。希望這對某人有用。

+0

您能否提供您正在使用的代碼示例? – stormdrain 2010-06-25 17:51:38

+0

請檢查我添加的內容,並告訴我是否做錯了什麼。感謝您願意幫助。 – 2010-06-25 20:52:15

+0

你能發佈你的JavaScript代碼嗎?我在這裏看不到任何AJAX。 – 2010-06-25 22:53:27

回答

1

這是因爲你設置的數據類型的回發的類型爲「HTML」的:

「HTML」:返回HTML純文本; 包含的腳本標記在插入DOM時評估爲 。

,如果你只是想表明請求成功或失敗,你可以有#errorsindicated填充像這樣:

success: function(){ 
      $('#errorsechoed').html('<h4> Request Successfull...</h4>'); 
} 
error: function(){ 
      $('#errorsechoed').html('<h4> Request Failed...</h4>'); 
} 

,你可以,如果你想獲得關於錯誤的詳細信息。請參閱jQuery ajax文檔的錯誤選項部分:http://api.jquery.com/jQuery.ajax/

+0

這解決了在div#errorsechoed中顯示頁面的問題。只有在用螢火蟲檢查請求時,頁面仍然被髮送。我已經看過文檔,但仍會繼續。謝謝 – 2010-06-26 17:07:24