首页 > 解决方案 > 找不到 CodeIgniter 数据表 ajax url。路由问题?

问题描述

我不知道如何在视图中设置数据表的 url。我认为这是一个路由问题,因为数据表可以使用控制器 Pages.php 中的函数,但不能使用控制器 Djur.php 中的函数。

我的结构是:

-application
--controllers
---Djur.php
---Pages.php
--models
---Djur_model
--views
---djur
----mina_djur (1)
---pages
----mina_djur (2)

两个控制器都包含相同的功能:

         public function __construct() {
                Parent::__construct();
                $this->load->model("djur_model");
            }
            public function djurlista()
                 {

                      // Datatables Variables
                      $draw = intval($this->input->get("draw"));
                      $start = intval($this->input->get("start"));
                      $length = intval($this->input->get("length"));


                      $djur = $this->djur_model->get_djur();

                      $data = array();

                      foreach($djur->result() as $r) {

                           $data[] = array(
                                $r->ani_se_number,
                                $r->ani_individual_number,
                                $r->ani_gender,
                                $r->ani_date_of_birth,
                                $r->ani_race,
                               $r->ani_name,
                               $r->ani_mother,
                               $r->ani_father
                           );
                      }

                      $output = array(
                           "draw" => $draw,
                             "recordsTotal" => $djur->num_rows(),
                             "recordsFiltered" => $djur->num_rows(),
                             "data" => $data
                        );

                      echo json_encode($output);
                      exit();
                 }

文件夹 djur (1) 中的视图 mina_djur.php 的 url 指定如下:

            <script type="text/javascript">
                $(document).ready(function() {
                    $('#mina_djur').DataTable(
                    {
                        "ajax": {
                            url : "<?php echo site_url("djur/djurlista") ?>",
                            type : 'GET'
                        },
                    }


                    );
                });
            </script>

加载页面 localhost/djur/mina_djur 时,一切都显示正确,除了数据表无法加载数据(Ajax 错误消息)。浏览器中的开发人员工具显示 XHR 的 500 错误。

然而,

当加载页面localhost/mina_djur(视图位于文件夹页面(2))数据表可以获取数据。在此文件中,url 指定为:

            <script type="text/javascript">
                $(document).ready(function() {
                    $('#mina_djur').DataTable(
                    {
                        "ajax": {
                            url : "<?php echo site_url("pages/djurlista") ?>",
                            type : 'GET'
                        },
                    }


                    );
                });
            </script>

如果视图位于文件夹页面而不是文件夹 djur 中,则一切正常的事实让我认为,当尝试从 djur/mina_djur 获取控制器 Djur.php 中的函数 djurlista 时,问题一定出在路由上。或者由于视图中的 url 错误。

我的路线是:

$route['djur'] = 'djur/view/mina_djur';
$route['djur/(:any)'] = 'djur/view/$1';
$route['om'] = 'pages/view/om';
$route['mina_djur'] = 'pages/view/mina_djur'; // Required to make the view in folder pages work
$route['default_controller'] = 'pages/view';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

为什么视图views/djur/mina_djur 不能使用控制器Djur.php 中的djurlista 函数?

标签: phpcodeigniterdatatables

解决方案


您应该将最具体的路线放在首位。所以交换这两个的顺序:

$route['djur'] = 'djur/view/mina_djur';
$route['djur/(:any)'] = 'djur/view/$1';

像这样:

$route['djur/(:any)'] = 'djur/view/$1';
$route['djur'] = 'djur/view/mina_djur';

推荐阅读