如何在同一个动作中处理表单渲染和ajax响应?

时间:2012-12-06 03:19:12

标签: php ajax cakephp cakephp-2.0

我的ProjectsController中有create()方法,它使用AJAX呈现表单并保存数据:

class ProjectsController extends AppController
{    
    public function create()
    {
        if ($this->request->is('post'))
        {
            $this->Project->create();
            $this->request->data['Project']['created_by'] = $this->Auth->user('id');
            if ($this->Project->save($this->request->data))
            {
                ...
            } else {
                ...
            }
        }

    }

如果数据被保存,我如何传递成功消息,如果不是ajax请求,我还可以呈现我的表单?我无法设置autoRender false'因为它必须呈现表单

这是处理jax请求的最正确方法吗?如果没有我该怎么办?

1 个答案:

答案 0 :(得分:1)

检测AJAX:

您可以使用:

if($this->request->is('ajax')) {

用ajax做任何你喜欢的事情,以及其余的显而易见的“其他”。

处理它:

可能是这样的:

if ($this->request->is('ajax')) {
    //process the ajax response
    $this->render('/Ajax/json');

} else {
    if($this->request->is('post')) {
        //process the post
    }
    //set variables for the view...etc etc

}

另一种选择 - 单独的功能:

或者,只有两个不同的动作也是相当普遍的 - 一个用于ajax,另一个用于你想要的任何其他动作。这是我喜欢它的方式,因为我宁愿不让if()全部阻塞。但是 - 对于他们自己,我看到两者都经常使用。

public function create_ajax() { ... }

public function create() { ... }