在 codeigniter 中使用 AJAX 从视图调用控制器函数并从 db 检索行

Posted

技术标签:

【中文标题】在 codeigniter 中使用 AJAX 从视图调用控制器函数并从 db 检索行【英文标题】:calling controller function from view and retrieving rows from db using AJAX in codeigniter 【发布时间】:2015-06-04 06:57:07 【问题描述】:

我正在尝试通过对控制器函数进行 AJAX 调用来从数据库中检索行。我没有错误消息,并且代码可以正常执行 $("#msgbox").html("Type the name of someone or something...");

我认为控制器没有从视图中正确调用。下面是我的 MVC 代码。

我的看法:welcome_message.php

<div id="centersearch">
    <script type="text/javascript" src="http://ajax.googleapis.com/
ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function()

var start=/^((?!PART).)*$/
var word=/^((?!PART).)*$/

$("#contentbox").live("keyup",function() 

var content=$(this).text(); //Content Box Data
var go= content.match(start); //Content Matching @
var name= content.match(word); //Content Matching @abc
var dataString = 'searchword='+ name;
//If @ available
if(go.length>0)

$("#msgbox").slideDown('show');
$("#display").slideUp('show');
$("#msgbox").html("Type the name of someone or something...");
//if @abc avalable
if(name.length>0)

$.ajax(
type: "POST",
url: "<?php $this->load->helper('url'); echo base_url();?>index.php/Welcome/ ?>", // Database name search 
data: dataString,
cache: false,
success: function(data)

$("#msgbox").hide();
$("#display").html(data).show();

);


return false();
);

//Adding result name to content box.
$(".addname").live("click",function() 

var username=$(this).attr('title');
var old=$("#contentbox").html();
var content=old.replace(word," "); //replacing @abc to (" ") space
$("#contentbox").html(content);
var E="<a class='red' contenteditable='false' href='#' >"+username+"</a>";
$("#contentbox").append(E);
$("#display").hide();
$("#msgbox").hide();
);
);
</script>

我的控制器:Welcome.php

 public function search()

  $this->load->database();  
         //load the model  
         $this->load->model('select');  
         //load the method of model  
         $data['s']=$this->select->search();  
          $this->load->view('welcome_message', $data); 


我的模型:Select.php

public function search($datastring)
     

$query = $this->db->select('*')
        ->from('country')
        ->where('from', $datastring)
        ->get();
        return $query;

【问题讨论】:

在ajax中简单使用url: "&lt;?php echo base_url();?&gt;index.php/welcome/search ?&gt;", 【参考方案1】:

你可以在你的构造函数中调用你的助手

function __construct() 
        parent::__construct();
        $this->load->helper('url');
    

你的 ajax 网址是

  url: "<?php echo base_url();?>index.php/Welcome/search?>",

【讨论】:

【参考方案2】:

您应该在类的构造函数中包含 URL 帮助器。

function __construct() 
    parent::__construct();
    $this->load->helper('url');

看起来你在 CI 上,所以除非你指定了一个路由,否则你的 ajax URL 是不正确的。

<?php echo base_url();?>index.php/welcome/search ?>

【讨论】:

【参考方案3】:

PHP 代码本身的上方某处加载url helper,就像在controllerconstructor function 中一样

url: "&lt;?php $this-&gt;load-&gt;helper('url'); echo base_url();?&gt;index.php/Welcome/ ?&gt;" ==> 这行写错了

这就是你的 ajax 请求应该是这样的

$.ajax(
type: "POST",
 url: "<?php echo base_url();?>index.php/Welcome ?>", // Database name search 
data: dataString,
cache: false,
success: function(data)

$("#msgbox").hide();
$("#display").html(data).show();

);

【讨论】:

【参考方案4】:

在你的控制器中加载 url helper

$this->load->helper('url');

并将其用于您的 ajax 调用。

url: "<?php echo site_url('welcome');?>",

请参考本文档 http://www.codeigniter.com/userguide3/helpers/url_helper.html#site_url

【讨论】:

【参考方案5】:

如果你想调用当前控制器的函数,你必须通过以下方式创建当前控制器的实例:

<?php
$CI =&get_instance();
$CI->method($param);
?>

【讨论】:

以上是关于在 codeigniter 中使用 AJAX 从视图调用控制器函数并从 db 检索行的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter- Ajax Codeigniter Ajax - 通过ajax返回不止一行

使用 jquery / ajax 在 CodeIgniter 的控制器中调用函数

在 CodeIgniter 中使用 AJAX 从数据库中获取单行?

如何在codeigniter中使用ajax在mysql数据库中插入数据?

在 CodeIgniter 中使用 ajax 出现 403 禁止错误

使用 codeigniter 和 jquery 进行 AJAX 分页