0

#Edit 我使用的是 CakePHP 2.3.5

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

  1. Ajax - POST 请求总是失败(我总是得到 ERROR 响应)
  2. 即使这样,我也可以将新用户添加到数据库 O_o
  3. 即使我有 beforeFilter 来识别 ajax 请求仍然重定向到视图(正如您在下面的源代码中看到的那样,我添加了 autoRender 参数 false)

我真的不知道发生了什么,我将不胜感激任何帮助!

这是源代码:

我的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 中的我的用户控制器

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';
    }
}
4

1 回答 1

2

您可以在此处为调试做一些事情:

1 -- 首先,确保您的请求到达正确的控制器功能。我注意到你有url: 'Users/add',你的 ajax 函数。通常,在调用控制器/视图之前,这将是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 并检查输出。

于 2013-05-28T12:14:34.787 回答