CakePHP 1.3:如何在不进入视图的情况下执行操作

我通过动作搜索有一个页面,用户可以指定一些选项来显示数据行.此过程需要几秒钟,因为需要相当多的后端逻辑.在返回的数据上,用户可以通过操作add_data将一行数据添加到另一个表以供将来参考.

请注意,搜索结果数据保存在表中,以便在用户决定保存行时(搜索结果是来自多个数据库的数据汇编)使我可以随时使用该行.在动作add_data之后,我希望能够使用搜索结果维护搜索视图,而不是让浏览器转到add_data视图并返回到引用者,在那里将没有搜索结果.

现在,我知道我可以检查这个表,我保存了搜索结果并将其加载到搜索视图中,但我很想知道是否可以在保持当前操作视图完整的情况下运行另一个操作而不咨询数据库.据我所知,没有任何$this->重定向(…)有效,因为搜索结果页面的URL缺少任何参数(例如mycontroller / search).

我添加了一个按钮,使用以下代码添加用户所需的数据:

echo $this->Html->link('+', array('action' => 'add_data', $reference_id));    // + button is created

有没有办法做到这一点?最好使用最小的Javascript.

最佳答案 按照步骤
here为您的蛋糕项目添加ajax支持.

然后,在呈现搜索视图的控制器中启用ajax帮助器:

$this->helpers('Ajax');

您应该能够像这样呈现您的链接,并且不会将用户引导离开搜索页面:

<?php echo $this->Ajax->link(
  '+', 
  array('action' => 'add_data', $reference_id),
  array('update' => 'my-div')
); 
?>
<div id='my-div'></div>

由于您希望用户能够将数据发送到该操作,因此您可能希望查看发布表单而不仅仅是链接. Ajax助手还提供了通过Ajax提交表单的能力:

echo $form->create();
echo $form->input('field1');
echo $form->input('field2');
echo $ajax->submit('Submit', array(
   'url'=> array('controller'=>'mycontroller', 'action'=>'add_data'),
   'update' => 'my-div'

));
echo $form->end();

在你的控制器….

function add_data() {
  // ... do something
  $this->layout = 'ajax';
  $this->set('message', 'Your message here!');
}

在add_data视图中….

<?php echo $message; ?>
点赞