2011-03-19 83 views
0

我的問題是我使用codeigniter和使用基本的模板爲我的網站,所以我的標題將在一個單獨的文件中稱爲header.php和頁腳在文件footer.php。主網站頁面中的變量稱爲搜索Maincontent所以在我maincontent.php我將有以下線路:codeigniter視圖模板jquery ajax

<?php 
    $this->load->view('includes/header'); 
    $this->load->view($maincontent); 
    $this->load->view('includes/footer'); 
?> 

一切工作正常,直到我想要做一些形式的基本AJAX的。我想從一個文件中加載一個頁面段,並將其插入到一個當前加載的頁面和#invoiceforms的目標ID中。 我如何獲得ajax和jquery加載我需要的段,並將其注入到當前的目標div中,而無需再次加載頁眉和頁腳以及所有內容。我想用jQuery的負荷,所以我會做這樣的事情:

$('#invoiceforms').load('path/to/page'); 
//or 
$.get('path/to/page',function(){etc}); 

我需要在我的控制器創建一個函數來指向這個特定頁面,如果是如何那麼我挑HTML我需要和注入到當前頁面?我之前有過這個問題,但不知道如何提出我的問題,所以我只是迴避了它。如果能在這裏得到幫助,我將不勝感激。

這是我沒有得到的部分。我有這個jQuery從一個頁面讀取HTML表:

$.get('../ajaxops/loadinvoice',function(data){ 
       $('#invoiceform').html('<table>'+data+'</table>'); 
      }); 

但是當它在目標DIV顯示出來,我想表出現在,那隻能說明我的表的文本,但不表結構本身。但使用螢火蟲,頁面會被髮送,包括表格的標記。這裏可能是什麼問題?

Ĵ

+0

是從loadinvoice返回的'data'中缺少的tr和td標籤嗎?您是否安裝了Web開發工具欄,或者您可以查看* generated *源的其他內容? – coolgeek 2011-03-20 00:53:24

回答

1

我使用一個單獨的控制器即可爲該基本上只是輸出我要去插入容器元素的HTML AJAX功能。

例如,爲了填充級聯選擇,我的jQuery是:

$(".addform #country, .searchform #country").change(function() { 
     var p = $("#country option:selected").val(); 
     $('#state').load('/ajax/states/get', {'country_id': p, 'csrf_token_name': cct}, function (data) {this.value = data;}) 
; 
}).change(); 

我控制器功能

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class States extends CI_Controller { 

    function __construct() 
    { 
     parent::__construct(); 
     $this->load->library('form_validation'); 
    } 

     // populate state dropdown via AJAX, based on country selected 
     function get() { 
       $this->form_validation->set_rules('country_id', 'country', 'trim|required|strip_tags|is_natural_no_zero'); 
       $data = null; 

       if($this->form_validation->run() == TRUE) { 
         $cid = $this->input->post('country_id'); 

         $this->load->model('Mgeography'); 
         $data['arr'] = $this->Mgeography->get_all_state_by_country_id($cid); 

         $data['optype'] = "select"; 
         $data['label'] = "state"; 
         $data['key'] = "state"; 
         $this->load->view('ajax_view',$data); 
       } 
     } 
} 
/* End of file states.php */ 
/* Location: ./application/controllers/ajax/states.php */ 

和我的觀點

if ($optype == "select") { 
    echo "<option value=\"0\">Choose ${label}</option>"; 
    foreach($arr as $row) { 
     echo "<option value=\"" . $row['id'] . "\">" . $row[$key] . "</option>"; 
    } 
} 

也不要忘記關於您的請求中的CSRF token

+0

好吧,讓我們試試看,看看有什麼。謝謝。 – 2011-03-19 13:49:31

+0

讓我說這個。你的答案是現貨,我再次微笑,但我有一個不同的問題。我只是加載一個HTML表格。當它加載時,它不會作爲表格加載。它像它剝離了所有的表格標記並放置文本。我用firebug來檢查發生了什麼,正確的標記是在響應中,但在頁面上沒有。有任何想法嗎? – 2011-03-19 15:22:17

+0

不確定是不是...更新與相關的jquery代碼 – coolgeek 2011-03-19 17:16:37