我正在使用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。
有没有更好的方法来解决这个问题?
答案 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);
}