2011-03-19 53 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