CakePHP - Ajax无法正常工作

时间:2013-05-25 22:22:12

标签: php javascript jquery ajax cakephp

#Edit我使用CakePHP 2.3.5

我想知道我的Ajax请求和Controller行为有什么问题。 这些是我遇到的问题:

  1. Ajax - POST请求总是失败(我总是得到ERROR响应)
  2. 即便如此,我也可以将新用户添加到数据库O_o
  3. 即使我有beforeFilter识别ajax请求仍然重定向到视图 (正如您在下面的源代码中看到的,我添加了autoRender参数false)
  4. 我真的不知道发生了什么事,我会感激任何帮助!

    这是源代码:

    我的ajax请求

    $('.addUser').on('click', function(){
        var data = $('#UserAddForm').serialize();      
        $.ajax({
            dataType: "html",
            type: "POST",
            evalScripts: true,
            url: 'Users/add',
            data: data,
            success: function (){
                $('#regInfo').html("User was created");
                $('#regInfo').css('color', 'darkgreen');
    
            },
            error: function(){
                $('#regInfo').html("User was not created");
                $('#regInfo').css('color', 'darkgreen');
            }
        });
    })
    

    CakePHP中的我的UserController

    public function add() {
    
    if ($this->request->is('post')) {
        $this->User->create();
        if ($this->User->save($this->request->data)) {
            $this->Session->setFlash(__('The user has been saved'));
        } else {
            $this->Session->setFlash(__('The user could not be saved. Please, try again.'));
        }
    }         
    

    }

    在我的AppController中

    public function beforeFilter(){  
        if ($this->request->is('ajax')) {
             Configure::write('debug', 0);
             $this->autoRender = false;
             $this->layout = 'ajax';
        }
    }
    

1 个答案:

答案 0 :(得分:1)

您可以在此处执行一些调试:

1 - 首先,确保您的请求达到正确的控制器功能。我注意到你的ajax函数中有url: 'Users/add',。通常,在调用控制器/视图之前,这将是url: '/Users/add',或找到另一种获取基本路径的方法

您可以进行简单的测试以确保它到达控制器视图功能:

$('.addUser').on('click', function(){
    var data = $('#UserAddForm').serialize();      
    $.ajax({
        dataType: "html",
        type: "POST",
        evalScripts: true,
        url: 'Users/add',
        data: data,
        success: function (data){
            console.log(data);
        }
    });
})

public function add() {
   $this->layout = 'ajax';
   $this->autoRender = false;
   echo json_encode(array('this is some' => ' json data'));
}

2 - 如果#1工作正常,则开始仔细检查发布的数据:

   public function add() {    
        $this->layout = 'ajax';    
        $this->autoRender = false;
        //just checking for request data because you 
        //may be doing a put and not knowing it    
        if ($this->request->data) {        
            echo json_encode($this->request->data);    
        } 
    }

使用chrome或firefox并检查输出。