无法在jQuery加载的PHP中访问CodeIgniter方法

时间:2014-03-20 14:53:18

标签: php jquery codeigniter

我正在使用jQuery .load()方法将php文件加载到视图中的div中。这是因为在页面上的某些操作中,我不希望整个页面刷新,而只是想要一个div来更改其内容。

//view file

function loadCallback(a) 
{
  $('#div').load("/inner.php", {json: JSON.stringify(a)});
}

function load() 
{
  $.post('/controller/method', {}, loadCallback, 'json');
}

加载的php文件执行一些服务器端处理。一切都工作正常,直到我需要本地化这个文件,我在我的代码中使用CodeIgniter语言助手。 lang()方法在这个动态加载的PHP中不起作用,尽管它可以在其他任何地方使用。看来这个PHP没有CodeIgniter框架的上下文。即使getinstance()也无法在文件内部工作。我猜测在动态加载的PHP端没有解决方法。

//inner view (inner.php)
$stringValue = lang('key');

//PHP Fatal error:  Call to undefined function lang() in inner.php

由于我是通过javascript从视图文件加载这个PHP,我也无法在那里使用PHP lang函数,并且必须使用回调变量从控制器一直发送这些静态本地化字符串,我发现非常hacky。

有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

就像我的评论一样,将你的inner.php逻辑放在代码点火器控制器中,并让控制器回显你的视图文件,现在你只是点击了一个名为your_domain.com/inner.php的页面,而不是一个视图文件名为inner.php

所以代替:

function loadCallback(a) 
{
  $('#div').load("/inner.php", {json: JSON.stringify(a)});
}

做类似的事情:

function loadCallback(a) 
{
  $('#div').load("/controller/ajax_method", {json: JSON.stringify(a)});
}

然后在你的控制器里面:

function ajax_method(){
    //some logic....
    $this->load->view('inner', $data);
}

您可能需要对ajax_method函数中的视图进行json_encode编码,因为您似乎想要这样做,在这种情况下有些像:

function ajax_method(){
    //some logic
    $json['json'] = $this->load->view('inner', $data, true)
    echo json_encode($json);
}