Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Cakephp中呈现AJAX视图_Php_Ajax_Cakephp - Fatal编程技术网

在Cakephp中呈现AJAX视图

在Cakephp中呈现AJAX视图,php,ajax,cakephp,Php,Ajax,Cakephp,我有一种方法可以根据请求类型呈现标准视图文件index.ctp或AJAX视图文件index\u AJAX.ctp 在我的控制器中-我有以下代码 public function index() { if ($this->request->is(array('get', 'post))) { // .... do normal stuff } elseif ($this->request->is('ajax')) { $this->aut

我有一种方法可以根据请求类型呈现标准视图文件
index.ctp
或AJAX视图文件
index\u AJAX.ctp

在我的控制器中-我有以下代码

public function index() {
   if ($this->request->is(array('get', 'post))) {
     // .... do normal stuff
   } elseif ($this->request->is('ajax')) {
     $this->autorender = false;
     echo 'blah blah'; // this shows 
     $this->render('index_ajax', 'ajax'); // this does not render
     exit;
   }
}
调用此AJAX视图的Javascript如下所示

$('#myModal').on('show.bs.modal', function (event) {
    $.ajax({
        url: '/cake/myController/index',
        type: 'ajax',
        success: function(data) {
            alert(data);
            $('#link-list').html(data);
        }
    });             
});
现在,普通的索引视图渲染得很好-没有任何问题,但是AJAX视图没有渲染。如果我在控制器中放入一个echo语句,该语句会被输出到视图,但实际的视图文件本身不会被拾取和渲染。我不确定我的错误是什么-非常感谢您的帮助。

试试这个:

 if ($this->request->is(array('get', 'post'))) {
         // .... do normal stuff
       } elseif ($this->request->is('ajax')) {
         $this->view="index_ajax";
         $this->layout="ajax";

       }

在这之后,如果您使用的是块或类似的东西,而没有显示您的代码或类似的东西,请查看您的布局ajax。

好的-经过大量的尝试和尝试,我找到了解决方案

对于我发布的原始问题,@mark给出了正确的答案,此后我加入了可用的插件——本质上,我们下载并包含了该链接中提到的插件,在控制器的AJAX方法中,我们添加了一行代码,如下所示

$this->viewClass = 'Tool.Ajax'
在ajaxjavascript中,包含以下代码行,它从解析的JSON数组中提取内容并嵌入到提供的HTML选择器中

$.ajax ({
   url: '/myajaxurl',
   type: 'ajax',
   success: function(data) {
       $('myDiv').html(data.content);
   }
});
沃拉!现在将呈现AJAX视图。我检查了插件源代码,发现Mark实际上扩展了基本视图类,并重写了render方法,通过JSON数组呈现AJAX视图。然而,这给我带来了一个问题,因为我在AJAX视图中也有分页。因此,虽然链接可以很好地呈现,第一个页面可以很好地加载,但第二个页面和后续页面将作为未解析的JSON数组加载

为了克服这个问题,我不得不做了大量的修改,最终我发现我们需要放弃CakePHP手册中指定的默认AJAX分页,并使用Mark在这里提供的AJAX分页(以及相应的页面)。本质上,我们现在应该使用
echo$this->Pagination->numbers()
元素('Tools.Pagination'),而不是使用默认的
echo$this->Pagination->numbers(),我们应该包括一个javascript,它以以下方式绑定生成的分页链接-

假设分页链接位于标识为“分页”的div中,这些链接由Mark的插件动态生成

$(document).on('click', 'div.pagination a', function(evt) {
                evt.preventDefault();
                $('#myDiv').load($(this).attr('href'), function(data) { 
                                                        var res = $.parseJSON(data); 
                        $('#myDiv').html(content);
                });
});
本质上,上面发生的事情是,我们将每个分页链接绑定到不同的事件,而不是CakePHP自动生成的事件。因此,我们通过
load
方法加载hyperlink的内容,但是由于AJAX视图返回了一个JSON数组,因此我们正在解析它并相应地设置DIV的内容


希望这对其他人有帮助

请参阅如何利用扩展和一些自定义JS在CakePHP中轻松检索AJAX输出。PS:您应该经常提到您使用的确切cakephp版本。我使用的是cakephp 2.5.xMark-我查看了您的网站,但是您能帮助我理解为什么默认情况下在ajax布局中不呈现视图吗?当我们明确提到render时,怎么会传递回显的东西呢?我使用了AJAX视图,它工作得很好-但是当我将它与AJAX分页结合起来时,我有一个独特的问题。第一个页面呈现得非常好,但是第二个页面是一个转义的JSON数组。我认为,问题在于分页链接不会通过Javascript函数重定向-您对如何解决这个问题有什么建议吗?