我正在尝试使用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'];
}
答案 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",
.....