PHP的CodeIgniter访问控制器要求

时间:2015-07-31 00:40:42

标签: javascript php ajax codeigniter

我正在为我的项目使用codeigniter而且我一直试图解决这个问题。

我有一些javascript需要执行AJAX调用,以根据所选的下拉值获取一些结果。

function fetchLines(){
 $.ajax({
    url: baseURL + "resources/ajax.php?node=fetchLines",
    type: 'GET',
    cache: false,
    data: {
       lineType: 'business'
    },
    error: function(err) {
        alert(err.statusText);
    },
    success: function(data) {

        console.log(data);

    }

});
}

在这个AJAX文件中,我试图包含我的控制器,然后访问其中的函数。

<?php
define('BASEPATH', "AJAX");
require_once('../application/controllers/Project.php');


switch($_REQUEST['node']){

    case 'fetchLines':
        $objLines = new Project();
        $objLines->fetchLines($_REQUEST['lineType']);
    break;

}

?>

我的CI控制器中有一个私有函数,我试图调用它来获取我需要的数据:

private function fetchLines($lineType){
    $lines = $this->project_model->fetchLines($lineType);
    return $lines;
}

我的目标是让AJAX文件或控制器(如果需要)用于我的所有AJAX调用。它需要能够访问控制器并返回数据。

使用上面的当前代码,我收到错误:Class 'CI_Controller' not found in <b>C:\xampp\htdocs\blueprint\application\controllers \Project.php

有没有更好的方法来处理这样的情况?我不是OOP的专家,但是有些阅读提示了这些内容。

3 个答案:

答案 0 :(得分:1)

为什么不将此请求发送到控制器方法呢?

        function fetchLines(){
         $.ajax({
            url: baseURL + "controller-name/method-name",
            type: 'GET',
            cache: false,
            data: {lineType: 'business'},
            error: function(err) {
                alert(err.statusText);
            },
            success: function(data) {

                console.log(data);

            }

        });
        }

注意,您可以在控制器中以

的形式访问这些值
function method-name(){
    echo $this->input->get('lineType');
}

答案 1 :(得分:0)

假设我的ajax文件位于controllers文件夹中 我想重新使用我的控制器,我会这样做:

$this->load->library('../controllers/your_controller'); 
$this->your_controller->_some_method($data);        

将控制器加载为库并像库一样使用它。 希望这会有所帮助。

答案 2 :(得分:0)

您应该只将侦听AJAX调用的代码放在控制器函数中。你试图做的方式根本不是一个好的做法。 如果您希望仅在请求是XHR ieAJAX请求时才执行方法,请使用

if($this->input->is_ajax_request()){ //your code }else{ redirect(base_url()) }