我正在使用 jQuery .load() 方法将 php 文件加载到我 View 内的 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 从 View 文件加载此 PHP,因此我也无法在那里使用 PHP lang 函数,并且必须使用我发现的回调变量从 Controller 一路发送这些静态本地化字符串相当老套。
有没有更好的方法来解决这个问题?
最佳答案
就像我的评论一样,将您的inner.php逻辑放入代码点火器 Controller 中,并让 Controller 回显您的 View 文件,现在您只是点击一个名为your_domain.com/inner.php的页面,而不是 View 文件名为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)});
}
然后在你的 Controller 内:
function ajax_method(){
//some logic....
$this->load->view('inner', $data);
}
您可能需要在 ajax_method 函数中对 View 进行 json_encode,因为您似乎想要这样做,在这种情况下,类似于:
function ajax_method(){
//some logic
$json['json'] = $this->load->view('inner', $data, true)
echo json_encode($json);
}
关于php - 无法访问 jQuery 加载的 PHP 中的 CodeIgniter 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22536741/