我知道这应该是显而易见的,但我无法在互联网上找到任何有用或更新的内容。
我试图用ajax执行请求,获取视图内容以及从cakePHP控制器执行的JS代码。
请求是:
$.ajax({
url: '/alarm/fetchGadgetsComponent',
type: "POST",
cache: false,
dataType: 'json',
success: function (data) {
console.log(data);
}
});
,PHP类看起来像这样:
class AlarmController extends AppController {
public $uses = false;
public $components = array('RequestHandler');
public function index() {
}
public function fetchGadgetsComponent()
{
if ($this->request->is('Ajax'))
{
$this->autoRender = false;
$this->layout = 'ajax';
$html = $this->render('ajax\widgetsPanel');
$js = $this->render('ajax\widgetsPanel.js');
echo json_encode(array('html' => $html,'js' => $js));
}
}
}
首先,第一个渲染只是在屏幕上渲染到$html
变量。
其次,如何使用不同的方法获取js文件? (渲染方法显然不适用于此,因为它搜索.ctp文件)
以及如何将它们作为json表达式一起解析?
谢谢
答案 0 :(得分:0)
我知道json_encode是php函数,它将数组和其他php变量更改为有效的JSON,因此您无法获取javascript文件的内容并使用此方法将其更改为JSON。如果您想要更改,蛋糕渲染方法会呈现ctp文件查看前缀使用:
class AlarmController extends AppController {
public $uses = false;
public $components = array('RequestHandler');
public function index() {
}
public function fetchGadgetsComponent()
{
if ($this->request->is('Ajax'))
{
$this->autoRender = false;
$this->layout = 'ajax';
$html = $this->render('ajax\widgetsPanel');
$this->ext = '.js';
$js = $this->render('ajax\widgetsPanel.js');
echo json_encode(array('html' => $html,'js' => $js));
}
}
}
link to source code
我认为更好的方法是js文件的file_get_content
函数。
第二个更好地执行ajax请求是jsonView
答案 1 :(得分:0)
如果这个.js代码被widgetsPanel使用,那么这应该是从ctp文件中引用的,最有可能是通过cakePHP的js或html帮助器,为此设置js文件的名称作为视图变量并在其中使用它ctp文件。
然后你不需要调用$ this-> render()两次,并且一个简单的echo可以很好地显示widgetsPanel的内容,所以你可以调用render方法并调用json_encode。 也将dataType更改为HTML,dataType JSON仅用于获取精益数据,而不是整个html视图块。