来自AJAX函数的CakePHP模型错误回调

时间:2014-07-29 08:30:14

标签: javascript jquery ajax cakephp

更新

控制器代码,但非常简单,

  public function AJAX_AddNewUser() {
    $this->layout = 'ajax';
    $this->loadmodel('User');
    $this->loadmodel('Level');

    if ($this->request->is('post')) {
        $this->User->create();
        if ($this->User->save($this->request->data)) {
            $this->Session->setFlash(__('Something good.', 'default', array(), 'good'));
            return $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('Something bad', 'default', array(), 'bad'));
        }
    }

    $levels = $this->Level->find('list', array( 'fields' => array('Level.id', 'Level.leveltitle') ));       
    $this->set(compact('levels'));
    $this->render('/Admin/User/ajax_addnewuser');
}

首先,我在Cake 2.5.1中使用JQuery 1.11(我也有UI,但这里没有使用)。

因此,在我的管理视图中,我有一个按钮,它通过AJAX加载一个简单的表单来添加新用户,这可以工作,提交和添加数据而不会出现任何错误。但是我已经添加到我的CakePHP模型中进行基本检查,以确保用户是唯一的。因此,当管理员提交表单时,模型错误'消息显示在加载了ajax的用户输入表单中/上。

这或多或少有效,但它只在第一次工作,一旦管理员提交第二次,返回的结果是不同的。我不确定在这里我发现了这个代码,这里有一些帖子,但我有以下内容,

    var AdminAddNewUser = function() {
        $('#UserAddNew').on('click', function() {
            $.ajax({
                url: "/PATH",
                type: "GET",
                dataType: "html",
                success: function(data) {
                    $('#UserTargetUpdate').html(data);
                    SubmitingNewUser();
                },
                error: function(fail) {
                    console.log(fail);
                }
            }); //End of AJAX function    
        });
   }

   var SubmitingNewUser = function() {
        $('#UserAJAXAddNewUserForm').on('submit', function(e) {
            e.preventDefault();

            $.post($(this).attr('action'), $(this).serialize(), function(res) {

                var testString = res;
                console.log($(testString).find('div > .error-message'));

                if ( $(testString).find('div > .error-message') ) {
                    console.log( 'yes' );
                    console.log(res);
                } else {
                    console.log( 'no' );
                    console.log(res);
                }
            }) //End of post
        }) //end of 'on' submit
   }

   AdminAddNewUser();

第一个函数,是我的AJAX表单加载,我的用户表单。然后在成功回调中,我加载了我的替换'代码显示Cake的错误模型结果。

现在(正如你所看到的)我一直在做的所有控制台日志,我知道问题是什么(或者至少我认为我做了),当admin再次提交from时,结果是' RES' var是HTML代码的完整页面,我认为它会加载所有用户登录时获得的默认路径。

那么为什么只工作一次?我添加了ajax函数,在前置过滤器中加载用户表单,以便Cake内部的安全功能不对它做任何事情。

购买我有点迷失在这里,如果它工作一次,为什么失败或第二次返回不同的结果?

如果我没有正确解释自己或者我错过了任何内容,代码等,请告诉我,以便我发布更多详情。

非常感谢,

1 个答案:

答案 0 :(得分:0)

好的,所以这是我的最终代码,似乎有效,

  var SubmitingNewUser = function() {
        $('#UserAJAXAddNewUserForm').on('submit', function(e) {
            e.preventDefault();

            $.post($('#UserAJAXAddNewUserForm').attr('action'), $('#UserAJAXAddNewUserForm').serialize(), function(res) {
                var FormString = res;

                if ( $(FormString).find('div > .error-message').size() == 0 ) {
                    $('#UserAJAXAddNewUserForm').html('ok user saved!');
                } else {
                    $('#UserAJAXAddNewUserForm').html(res); //Add form back with errors from model
                }
            }) //End of post 
        }) //end of 'on' submit
   }

现在,我所做的就是用一条简单的短信替换用户添加表单,稍后我会另外设置。

感谢您的帮助。