【问题标题】:Sending AJAX Request from Controller back to View (CakePHP 2.0+)将 AJAX 请求从控制器发送回视图 (CakePHP 2.0+)
【发布时间】:2014-05-14 18:52:50
【问题描述】:

我正在尝试将 ajax 数据发送回视图,但它不起作用

这是我的控制器:

    $this->autoRender = 0;
    $this->layout = 'ajax';

    $data = $this->HostingAccount->HostPackage->find('list',array('conditions' => array(
                    'HostPackage.host_id' => $this->data['HostingAccount']['host_id'])));

    //can't get access to $options in my View
    set('options',$data);

在 default.ctp 我有:

    echo $this->Js->writeBuffer(array('inline' => true));  

在ajax.ctp中:

    <?php echo $this->fetch('content'); ?>

我尝试过使用不同的设置,例如注释掉 $this->autoRender 并尝试从默认视图而不是 ajax 访问 $options,但它只是不允许我从中获取数据。

请帮忙,谢谢!

【问题讨论】:

  • 根据定义,AJAX 不止一个请求,您不能将数据从控制器返回到原始视图 - 它是第二个异步请求 - 例如,您需要使用 JSON 发送它,然后使用触发 AJAX 请求的原始视图中的 JS 中的此响应。阅读this 并查看那里链接的实时示例。
  • 不确定 AJAX 不止一个请求是什么意思,我以前从未在任何地方看到过该定义,是的,可以将数据发送回视图,我只是想通了如何简单地为处理 AJAX 请求的函数创建视图。
  • 您仍在将其从辅助 (AJAX) 请求发送回主 (GET) 请求。

标签: php jquery ajax cakephp


【解决方案1】:

好的,所以我错过了处理 AJAX 请求的函数的视图,只需在控制器中为函数 ajax_populate() 创建一个视图 ajax_populate.ctp,我就能够从该视图中检索数据并使用进一步:

控制器:

        public function ajax_populate() {
        $this->layout = 'ajax';

        $data = $this->Domain->HostingAccount->HostPackage->find('list',array('conditions' => array(
                        'HostPackage.host_id' => $this->data['Domain']['host_id'])));

        $this->set('options', $data);
    }

查看:

<?php 
echo "<div><select>";
foreach($options as $key => $val){
    echo "<option value='$key'>$val</option>";
}
echo "</select></div>";

原始视图(从中调用 ajax):

       echo $this->Js->get('#DomainHostId')->event('change',$this->Js->request('ajax_populate',
                    array('method' => 'POST',
                          'async' => true,
                          'update' => '#host_packages',
                          'dataExpression' => true,
                          'data'=> $this->Js->serializeForm(array(
                             'isForm' => true,
                             'inline' => true
                            ))
                          //'evalScripts' => true
                         )));

?>

HTML: (div)

   <div id="host_packages"></div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-06
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2011-08-09
    相关资源
    最近更新 更多