3

我知道这应该很明显,但我在互联网上找不到任何有用或更新的东西。

我正在尝试使用 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 表达式?

谢谢

4

2 回答 2

0

我知道 json_encode 是将数组和其他 php 变量更改为有效 JSON 的 php 函数,因此您无法使用此方法获取 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));
        }
    }
}

链接到源代码 我认为更好的方法是file_get_contentjs 文件的功能。更好地执行 ajax 请求的第二个是jsonView

于 2013-10-19T20:47:27.080 回答
0

如果这个 .js 代码被 widgetsPanel 使用,那么应该从 ctp 文件中引用它,最有可能通过 cakePHP 的 js 或 html 助手,因为这将 js 文件的名称设置为视图变量并在 ctp 文件中使用它。

那么你将不需要调用 $this->render() 两次,一个简单的 echo 就可以显示 widgetsPanel 的内容,所以你将节省一次调用 render 方法和调用 json_encode。还将 dataType 更改为 HTML,dataType JSON 仅用于获取精简数据而不是整个 html 视图块。

于 2013-10-20T19:52:58.823 回答