AJAX函数的模型错误回调
CakePHP Model error callbacks from AJAX functions
更新
控制器代码,但它很简单,
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模型中添加了一些基本检查,比如确保用户是唯一的。因此,当管理员提交表单时,模型'error'消息将显示在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
}
现在,我所做的就是用一个简单的文本消息替换用户添加表单,稍后我将对其进行样式化。
谢谢你的帮助。
相关文章:
- 测试Angular Service解决错误回调中的promise
- $http服务未触发成功或错误回调
- jQuery AJAX错误回调未运行
- JavaScriptajax请求servlet调用错误回调函数
- 为什么 AJAX 完成和错误回调都触发了
- Cordova Android短信插件不会触发成功或错误回调
- 无法识别错误回调
- 在第一次错误回调时退出承诺链
- 如何获取 Ember 组件对象内部承诺成功或错误回调
- 在 Node.js 中传播错误回调,并避免所有额外的麻烦
- 在 HTTP 错误回调中访问“this”
- 在 AngularJS 中声明一个承诺,并带有命名的成功/错误回调
- 谷歌浏览器中的地理位置错误回调
- PhoneGap 3.0.0 Tanelih 蓝牙插件在 Android 上已启用错误回调不起作用
- $http错误回调不能与 httpProvider responseInterceptor 结合使用
- JayData 上的默认错误回调
- 错误回调中的错误:TestPlugin2 = 引用错误:找不到变量:在 file:///android_asset/ww
- 主干.js:保存方法始终返回错误回调
- AJAX 中的成功或错误回调不起作用
- Backbone.js:奇怪的.save()错误回调