问题描述
我正在为我的项目使用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的专家,但是有些阅读提示了这些内容。
1楼
Asim Shahzad
1
已采纳
2015-07-31 05:43:12
你为什么不把这个请求发送到控制器方法呢?
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');
}
2楼
reignsly
0
2015-07-31 01:17:01
让我说我的ajax文件在控制器文件夹中我想重新使用我的控制器,我会这样做:
$this->load->library('../controllers/your_controller');
$this->your_controller->_some_method($data);
将控制器加载为库并像库一样使用它。 希望这可以帮助。
3楼
Hannan
0
2015-07-31 05:07:59
您应该只将侦听AJAX调用的代码放在控制器函数中。 你试图做的方式根本不是一个好的做法。 如果您希望仅在请求是XHR ieAJAX请求时才执行方法,则使用
if($this->input->is_ajax_request()){ //your code }else{ redirect(base_url()) }