Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自AJAX函数的CakePHP模型错误回调_Javascript_Jquery_Ajax_Cakephp - Fatal编程技术网

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

Javascript 来自AJAX函数的CakePHP模型错误回调,javascript,jquery,ajax,cakephp,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

更新

控制器代码,但非常简单

  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和jQuery1.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的错误模型结果

现在有了我一直在做的所有控制台日志(如您所见),我知道问题是什么(或者至少我认为我知道),当管理员第二次提交from时,“res”var中的结果是一整页HTML代码,我认为它加载了所有用户登录时获得的默认路径

那为什么只工作一次呢?我在before过滤器中添加了加载用户表单的ajax函数,这样Cake中的安全函数就不会对它做任何事情

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

如果我没有正确解释自己,或者我遗漏了任何东西、代码等,那么请让我知道,以便我可以发布更多详细信息


非常感谢,

好的,这是我最后的代码,看起来很有效

  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
   }
现在,我所做的就是用一条简单的文本消息替换用户添加表单,稍后我将对其进行样式设置


感谢您的帮助。

显示控制器代码?控制器代码现已发布。在我发布之后,我确实考虑过这个问题,但它与我的所有其他ajax函数差不多。我认为这与JQuery代码有关;在函数的末尾…我很确定重定向一旦被触发就会引起问题。。。不管怎样,那么响应实际上包含什么呢?你认为这是“所有用户登录时获得的默认路径”,不管这意味着什么,但你实际检查过它吗?是的-(我想我已经修复了它,我会在另一条评论中发布),但为了回答你的评论ndm,是的,我做了,当我第一次提交时,我得到了带有模型错误的表单的HTML代码,但第二次,我只是从用户的默认路径返回HTML代码。