CodeIgniter 和 Javascript/Jquery 库

Posted

技术标签:

【中文标题】CodeIgniter 和 Javascript/Jquery 库【英文标题】:CodeIgniter and Javascript/Jquery Library 【发布时间】:2011-06-30 09:06:49 【问题描述】:

正如标题所说,我正在尝试弄清楚如何在 CI 上使用 javascript 和 jquery 库。

按照the docs 中的说明,我将库加载到我的控制器中:

$this->load->library('javascript');

然后,我在config.php中定义了jQuery文件(jquery.min.js)的位置:

$config['javascript_location'] = 'http://localhost/ci/assets/js/jquery/');

之后,我打开视图文件并放入这两行:

<?php echo $library_src;?>
<?php echo $script_head;?> 

这里出现第一个错误:未定义变量 $library_src 和 $script_head(不明白我必须在哪里设置它们)

无论如何,我已经注释了这些行并继续使用 jquery lib,方法是将其加载到我的控制器中:

$this->load->library('jquery');

下一个错误:无法加载请求的类:jquery。 (似乎找不到lib,我搞砸了什么?)

检查系统文件夹,它看起来所有文件都到位:

system/libraries/Javascript.php
system/libraries/javascript/Jquery.php

提前感谢您的帮助!

【问题讨论】:

据我所知,这至少是文档中的一个错误。逐行跟踪它们,正如 OP 所做的那样,我所做的只是产生上述错误。我已尝试按照以下答案中的说明进行操作,但无济于事。 【参考方案1】:

用途:

$this->load->library('javascript/jquery');

代替:

$this->load->library('jquery');

这将加载您的 jQuery 库。

【讨论】:

【参考方案2】:

正如我们在用户指南中所知道的,首先,它是一个实验性的但有效的。第一步是在 application/config/config.php 下打开你的配置文件。

输入下面一行:

// path to JS directory you want to use, I recommended to put the .js file under 'root app/js/yourfile.js'

$config['javascript_location'] = 'js/yourfile.js';

第二步是打开你的控制器,在构造方法中,输入以下代码:

// Load javascript class
$this->load->library('javascript');
$this->load->library('javascript/jquery'); // if u want to use jquery

然后,仍然在 index 方法中的控制器文件中:

$data['library_src'] = $this->jquery->script(); // Because I refer to use jquery I don't test to use $this->javascript->script().

然后打开您的视图文件并将以下代码放入标签头中:

<?php echo $library_src; ?>

这种方法对我有用,让我们试试吧。

【讨论】:

【参考方案3】:

你可以试试这个,对我有用。 在config.php中

$config['javascript_location'] = 'http://localhost/ci/js/jquery.min.js';

在控制器中

 public function __construct() 
    parent::__construct();
    $this->load->library('javascript');
    $this->load->library('javascript/jquery');


 public function index()
    $d['library_src'] = $this->jquery->script();
    $d['logalert']=$this->jquery->_show('#logalert',1000,"$('#logalert').html('hello world');");
    $this->load->view('main',$d);
 

在视野中(头)

<?php echo $library_src; ?>

查看内容(正文)

<div class="alert alert-dismissable alert-info" id="logalert">                          
        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    </div>

在 javascript 视图中

<script type="javascript">
$(document).ready(function() 
   <?php echo $logalert; ?>
;
</script>

编码愉快 :)

【讨论】:

【参考方案4】:

我遇到了同样的问题,发现:

<?php $this->load->library('javascript'); ?>
<?php $this->load->library('javascript/jquery'); ?>

在https://ellislab.com/forums/viewthread/181742/#860506

因为 jquery 在 javascript 文件夹中。

或者

$autoload['libraries'] = array('database', 'session', 'javascript', 'javascript/jquery');

在 autoload.php 文件中。

这样就解决了加载库的问题。

【讨论】:

【参考方案5】:

不知道为什么你必须通过控制器加载你的 js 文件,然后在你的视图中回显它。您可以直接在视图中使用 HTML 标记加载您的 js 文件。从控制器传递数据并在视图中回显它主要用于当变量的值是动态的/需要从数据库加载等时。

【讨论】:

【参考方案6】:

因为这个驱动程序是实验性的,所以文档还没有。但我找到了解决办法。

首先,文档中有错误。除非您更改核心 Javascript 库(不建议),否则引用变量不是 $script_head,但实际上是$script_foot

其次,一旦你打完电话,似乎你需要运行

$this->javascript->external();

$this->javascript->compile();

这些函数设置$library_src$script_foot 变量。

总而言之,在您的控制器中,您将拥有:

class Some_Controller extends CI_Controller 
   public function index()
   
       $this->javascript->click('#button', "alert('Hello!');");
       $this->javascript->external();
       $this->javascript->compile();
       $this->load->view('index');
   

在你看来,你会拥有

<html>
  <head>
     <?php echo $library_src; ?>
     <?php echo $script_foot; ?>

【讨论】:

【参考方案7】:

将代码像这样放在config.php中:

$config['javascript_location'] = 'js/jquery/jquery.js';
$config['javascript_ajax_img'] = 'images/ajax-loader.gif';

在您的控制器文件(例如,controllers/sample.php)中输入以下代码:

 function __construct()
   
        parent::__construct();
            $this->load->library('javascript');                    
   

function index()


    $data['library_src'] = $this->jquery->script();
    $data['script_head'] = $this->jquery->_compile();

    $this->load->view('sampleview', $data);


在您的视图文件(例如views/sampleview.php)中输入以下代码:

<?php echo $library_src;?>
<?php echo $script_head;?>

这对我有用。我希望它也适合你。呵呵

【讨论】:

这实际上是对实际问题的正确答案。但它应该与 jondavidjohn 回答的第一部分一起详细说明,请参阅 javascript 库是一个驱动程序,这意味着这些部件在那里,但核心库,即 jquery 不是。这只是一组可用于帮助您使用 jQuery 进行开发的基本快捷方式。因此,添加上面的行并将 jQuery 下载到您的应用程序将为您提供 jQuery 中核心/最流行功能的小快捷方式,这很有帮助,但 CI 的实现对于更复杂的应用程序没有用处。 我这样做了,它运行了,但它仍然无法访问 jquery 文件。我认为 .htaccess 文件正在将请求重定向到不知道如何处理它的 index.php 。无论如何,我在 jquery 文件中得到 404,我把它放在 application/js/jquery.js【参考方案8】:

请务必注意,此驱动程序被标记为实验性,因此我不会依赖它。

另外,我个人认为尝试直接将应用程序的服务器端部分与客户端部分混合在一起会让人感到困惑和头痛。

要在您的视图中使用 javascript,我将首先像这样加载它们...

<script type="text/javascript" src="<?= base_url() ?>path/to/jquery.js"></script>

【讨论】:

也谢谢你!我是 CI 框架的新手,我认为这个库可以帮助我加快开发速度。无论如何,我会听从你的建议。 我们应该避免使用 = 而应该使用 【参考方案9】:

虽然 CI 首先查找 system 文件夹,但您也可以尝试将您的库放在这些文件夹中:

application/libraries/Javascript.php
application/libraries/javascript/Jquery.php

【讨论】:

你把$this-&gt;load-&gt;library('jquery');这行放在哪里了? @Sarfraz:在我的控制器的 __contructor 函数中。 尝试将其移至:index 方法? @Sarfraz:是的,没有区别。无论如何,我正在运行 CI 的最后一个版本……那是稳定的还是你建议我继续使用上一个版本? @Luciano:每次发布新版本时,都会修复错误/问题。因此,移至最新版本始终是一个好主意。请注意,几周前新的 CI 主要版本已经到来 :)

以上是关于CodeIgniter 和 Javascript/Jquery 库的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter 视图、HTML、JS 和 CSS 压缩构建工具

023.CI4框架CodeIgniter, 图片和JavaScript和Css文件的存储和访问

在 CodeIgniter 中寻找一些 Javascript 类的好例子

在 php(CodeIgniter) 中不使用 javascript 加载模态

javascript 中无法识别 Codeigniter 基本网址

如何在codeigniter ci中加载javascript css文件