Codeigniter - 如何使用ajax访问用户定义的函数?

时间:2016-06-16 13:23:28

标签: jquery ajax codeigniter codeigniter-3

我正在尝试使用ajax调用用户定义的库函数,如下所示。

$(document).ready(function() 
{
        $("a.refresh").click(function() 
        {
            jQuery.ajax(
            {
                type: "POST",
                url: "<?php echo base_url(); ?>" + "application/libraries/Captcha_lib/captcha_refresh",
                success: function(res) 
                {
                    if (res)
                    {
                        jQuery("span.image").html(res);
                    }
                }
            });
        });
});

我在firebug中收到以下回复:

  

您无权访问所请求的对象。       它受读保护或服务器无法读取。

注意: 如果我将 captcha_refresh函数放入我的Login控制器并将URL传递给ajax,如下所示

  

jQuery.ajax(               {                   键入:&#34; POST&#34;,   网址:&#34;&#34; +&#34;登录/验证码_刷新&#34;,.....});

然后它工作正常。但是,我不想这样做。

这是我的 captcha_refresh函数

public function captcha_refresh()
{
        $values = array(
            'word' => '',
            'word_length' => 8,
            'img_path' => './hrms_assets/captcha_img/',
            'img_url' => base_url() .'hrms_assets/captcha_img/',
            'font_path' => base_url() . 'system/fonts/texb.ttf',
            'img_width' => '150',
            'img_height' => 50,
            'expiration' => 3600
        );
        $data = create_captcha($values);
        $this->session->userdata['captchaWord'] = $data['word'];
        echo $data['image'];
}

3 个答案:

答案 0 :(得分:2)

1)在控制器中创建方法 2)在控制器中调用相同的库函数captch_refresh并从库函数返回数据。 3)从控制器的方法发送响应

Ajax Call Url:

// Controller Code
class Login extends MY_Controller {

public function captcha_refresh() {
   // load library
   $this->load->library('captcha_lib');
   // call library function
   echo $this->captcha_lib->captcha_refresh();
   exit(); 
}


// Make Library method
class Captcha_lib {
public function captcha_refresh(){
    $CI =& get_instance();

    $values = array(
    'word' => '',
    'word_length' => 8,
    'img_path' => './hrms_assets/captcha_img/',
    'img_url' => base_url() .'hrms_assets/captcha_img/',
    'font_path' => base_url() . 'system/fonts/texb.ttf',
    'img_width' => '150',
    'img_height' => 50,
    'expiration' => 3600
    );
    $data = create_captcha($values);
    $CI->session->userdata['captchaWord'] = $data['word'];
    return $data['image'];
}

}

// Jquery Code

$(document).ready(function() {
    $("a.refresh").click(function() {
    jQuery.ajax({
    type: "POST",
    url: "<?php echo base_url('login/captcha_refresh'); ?>",
    success: function(res) {
    if (res)
    {
    jQuery("span.image").html(res);
    }
    }
    });
    });
    });

答案 1 :(得分:0)

试试这个:

$(document).ready(function() {
            $("a.refresh").click(function() {
               jQuery.ajax({
                 type: "POST",
                 url: "<?php echo APPPATH; ?>" + "libraries/Captcha_lib/captcha_refresh",
                 success: function(res) {
                    if (res)
                    {
                      jQuery("span.image").html(res);
                    }
                 }
               });
             });
            });

或创建一个控制器&amp;在那里叫你库来执行你的功能。

class Welcome extends CI_Controller {

    public function index()
    {
        $this->load->libraray('captcha_lib');
        echo $this->captcha_lib->captcha_refresh();
    }
}

在此之后,您的ajax网址应如下所示:url: "<?php echo base_url('welcome/index'); ?>",

答案 2 :(得分:0)

你做错了,你的代码: -

    jQuery.ajax({

        type: "POST",
        url: "<?php echo base_url(); ?>" + "application/libraries/Captcha_lib/captcha_refresh",
        success: function(res) {

             .....

在此,您的网址将类似于&#34; http://your-site/application/libraries/Captcha_lib/captcha_refresh&#34; 。这意味着您将对此URL发出请求,只有在以下情况下它才会给您回复: -

  • 您使用网址重写将其转换为实际网址
  • 这是原始网址

但在你的情况下,没有一个是真的。您的实际网址是&#34; http://my-site/application/libraries/Captcha_lib.php&#34; captcha_refresh Captcha_lib.php 文件中的一个功能。因此,仅通过调用 Captcha_lib.php 文件不会执行。它就像你有一个基于类的文件,但没有 main()函数。

使用MVC(模型视图控制器)技术更好。您可以创建一个控制器并在控制器中加载库,如下所示: -

 <?php 

 # application/controllers/HandleMe.php

 class HandleMe extends CI_Controller
 {

      function index()
      {
            $this->load->library('Captcha_lib');
            echo $this->captcha_lib->captcha_refresh();
      }
 }

您的javascript代码应为

   jQuery.ajax({
    type: "POST",
    url: "<?php echo base_url(); ?>" + "index.php/HandleMe",
    .....