我在联系人视图中遇到了一个验证问题。验证在我的控制器中,我试图通过 AJAX 将表单数据发送到那里。下面是我的AJAX代码:
$(document).ready(function(){
$('.contact_form').submit(function(event){
event.preventDefault();
let name = $('#name').val();
let title = $('#title').val();
let mail = $('#mail').val();
let text = $('#text').val();
$.ajax({
type:'POST',
url:'../Strona/contact',
dataType:'json',
crossDomain:false,
cashe:false,
contentType:"text/javascript",
data:{
name: name,
title: title,
mail: mail,
text: text
}
})
.done(function(data){
console.log(data);
if(data.res === 'yes'){
console.log(data);
$('.contact_form').html(data.list);
}else{
$.each(data.list,function(k,v){
console.log(data);
$('.error_'+k).append(v);
});
}
});
});
在我的控制器中进行验证:
if($this->request->is('post')){
$data = $this->data;
$errors=array();
if(!$data['Contact']['name']){$errors['name'] = 'Bitte geben Sie einen Namen ein';}
if(!$data['Contact']['email']){$errors['email'] = 'Bitte geben Sie eine E-Mail-Adresse ein';}
if(!$data['Contact']['title']){$errors['title'] = 'Bitte geben Sie einen Titel ein';}
if(!$data['Contact']['description']){$errors['description'] = 'Bitte geben Sie eine Nachricht ein';}
if(count($errors) > 0){
$result = array('res'=>'no','list'=>$errors);
$el['Result'] = $result;
$el['Contact'] = $data;
$el['Contact'] = $el['Contact']['Contact'];
$this->set('errors');
$this->set('_serialize', array('errors'));
$this->set('el',$el);
}else{
$result = array('res'=>'yes','list'=>'Vielen Dank für das Senden einer E-Mail');
$txt = $data['Contact']['name'].'<br>'.$data['Contact']['description'];
$subject = $data['Contact']['title'];
$from = $data['Contact']['email'];
$this->Ajax->mailsend($txt, $subject, $from);
$data['result'] = $result;
$this->Contact->save($data);
$this->Session->setFlash('Nachricht gesendet');
$this->redirect(array('action' => 'contact/'));
}
}
当我点击按钮发送消息,并有一个空的输入错误应该显示,但没有发生任何事情。请求没有发送到控制器。
我想问题可能出在我妻子身上。
<form method="POST" action="" class="contact_form">
<div class="form-group">
<input type="text" class="form-control" id="name" name="data[Contact][name]" value="<?php echo $el['Contact']['name']; ?>" placeholder="Dein Name"/>
<div class="error error_name"></div>
</div>
<div class="form-group">
<input type="email" class="form-control" id="email" aria-describedby="emailHelp" name="data[Contact][email]" value="<?php echo $el['Contact']['email']; ?>" placeholder="Deine E-Mail-Adresse"/>
<div class="error error_email"></div>
</div>
<div class="form-group">
<input type="text" class="form-control" id="title" name="data[Contact][title]" value="<?php echo $el['Contact']['title']; ?>" placeholder="Betreff"/>
<div class="error error_title"></div>
</div>
<div class="form-group">
<textarea class="form-control" id="describe" name="data[Contact][description]" placeholder="Deine Nachricht" rows="10"><?php echo $el['Contact']['description']; ?></textarea>
<div class="error error_description"></div>
</div>
<input type="submit" id="send" class="btn btn-primary" value="Senden">
</form>
2条答案
按热度按时间gv8xihay1#
您使用的是
$this->set('el',$el);
,但这只会使$el
变量对任何可能呈现的视图都可用。我认为它只是转储了你设置为序列化的变量的内容。你没有设置任何要序列化的变量。如果您想这样做,请参见JSON and XML views,了解如何设置_serialized
变量。如果你想更明确地表达,你可以替换
set
调用,并发送一个字符串作为响应:ibrsph3r2#
我还不能添加评论,所以我会从我的Angular 回答。 AJAX 事件似乎被封装在一个函数中。如果你只想侦听事件,尝试将提交操作从函数中取出,放入一个
$(document).ready();
块中,它应该会触发。我还建议你在JavaScript中而不是在控制器中进行表单验证。回传你的结果!希望这对你有帮助