【问题标题】:codeigniter view templates jquery ajaxcodeigniter 视图模板 jquery ajax
【发布时间】:2011-11-13 09:42:40
【问题描述】:

我的问题是我使用 codeigniter 并为我的网站使用基本模板,因此我的页眉将位于名为 header.php 的单独文件中,页脚位于文件 footer.php 中。主站点页面位于名为 maincontent 的变量中,因此在我的 maincontent.php 中,我将包含以下几行:

<?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 并将其注入当前页面?我以前遇到过这个问题,但不知道如何问我的问题,所以我只是回避了它。如果我能在这里得到帮助,我将不胜感激。

这是我没有得到的部分。我有这个从页面中获取 html 表的 jquery:

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

但是当它出现在我希望表格出现的目标 div 中时,它只向我显示表格的文本,而不是表格结构本身。但是使用萤火虫,页面被发送过来,包括表格的标记。这可能是什么问题?

j

【问题讨论】:

  • 从 loadinvoice 返回的“数据”中是否缺少 tr 和 td 标签?您是否安装了 Web 开发人员工具栏,或其他可以查看 生成的 源代码的地方?

标签: jquery ajax codeigniter


【解决方案1】:

我只为 ajax 函数使用单独的控制器,它基本上只是输出我要插入到容器元素中的 html。

例如,要填充级联选择,我的 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

【讨论】:

  • 让我这么说吧。你的回答很准确,我又笑了,但我有一个不同的问题。我只是在加载一个 html 表。加载时,它不会作为表格加载。就像它剥离了所有表格标记并只放置文本。我使用萤火虫检查发生了什么,正确的标记在响应中,但在页面上却没有。有什么想法吗?
  • 不确定副手...用相关的 jquery 代码更新问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
相关资源
最近更新 更多