我正在尝试使用CakePHP 2.1中的Ajax和jQuery获取验证错误,以获取联系表单。在名称字段模糊时,调用js函数:
$(document).ready(function(){
$('#name').blur(function(){
$.post(
'/Cake_ajax/Contacts/validate_form',
{ field: $(this).attr('id'), value: $(this).val() },
handleNameValidation
);
});
function handleNameValidation(error){
if(error.length > 0){
if($('#name-notEmpty').length == 0){
$('#name').after($('<div id="name-notEmpty" class="error-message">' + error + '</div>'));
}
}else{
$('#name-notEmpty').remove();
}
}
});
javascript调用我的控制器中的validate_form函数:
public function validate_form(){
if($this->RequestHandler->isAjax()){
$this->request->data['Contact'][$this->request->params['form']['field']] = $this->request->params['form']['value'];
$this->Contact->set($this->request->data);
if($this->Contact->validates()){
$this->autorender = FALSE; // don't render a view
}else{
$error = $this->validateErrors($this->Contact);
$this->set('error', $error[$this->request->params['form']['field']]);
}
}
}
在我看来,在调用错误时我遇到了一些错误:
Undefined index: form [APP\Controller\ContactsController.php
Undefined index: form [APP\Controller\ContactsController.php
我的智慧结束了,而且我是CakePHP的新手。任何帮助将不胜感激。
答案 0 :(得分:2)
尝试使用$this->request->params['field']
代替$this->request->params['form']['field']
。
或者在您检查isAjax()
后,尝试在$this->request->params
上执行var_dump。从您收到的错误中,$this->request->params
中不存在表单索引。
答案 1 :(得分:2)
在你的控制器中你应该有类似下面的内容。 Cake 2.0取代了RequestHandlerComponent和Controller中的许多功能。它还将所有地方的$ this-&gt; params数组和旧的$ this-&gt;数据替换为$ this-&gt; request-&gt;数据,就像那样。您可以访问migration guide。
public function validate_form(){
if($this->RequestHandler->isAjax()){
$this->request->data['Contact'][$this->request['form']['field']] = $this->request['form']['value'];
$this->Contact->set($this->request->data);
if($this->Contact->validates()){
$this->autorender = FALSE; // don't render a view
}else{
$error = $this->validateErrors($this->Contact);
// didn't validate logic
$this->set('error',$this->Contact->validationErrors[$this->request['data']['field']][0]);
}
}
}
答案 2 :(得分:0)
如果你想模拟使用标准表格和Cake FormHelper时完成的POST,你也可以简单地命名发布的参数,就像FormHelper命名输入字段一样。
$j.post(
'/Cake_ajax/Contacts/validate_form',
{ "data[Contact][" + $(this).attr('id') + "]": $(this).val() },
handleNameValidation
);
这会自动填充$this->request->data['Contact']['name']
,你可以只评论这一行:
//$this->request->data['Contact'][$this->request->params['form']['field']] = $this->request->params['form']['value'];