Bonsoir à tous !
J'ai un problème avec l'utilisation d'Ajax dans un formulaire avec CakePHP 2. Lorsque je clique une première fois sur le bouton de mon formulaire, le traitement en Ajax se fait correctement, seulement lorsque je re-envoi mon formulaire, j'obtiens une erreur "400 Bad Request" !
Voila mon action signup de mon UsersController pour laquelle je souhaite faire le traitement en Ajax :
[code]
public function signup(){
if ($this->request->is('ajax')) {
$this->autoRender = false;
$data = $this->request->data;
if (!empty($data['User']['password'])) {
$data['User']['password'] = Security::hash($data['User']['password'],null,true);
}
if($this->User->save($data,true,array('username','password','mail'))){
$errors['status'] = 1;
} else {
$errors = $this->User->invalidFields();
$errors['status'] = 0;
}
echo json_encode($errors);
}
[/code]
Mon JavaScript :
[code]
jQuery(function($){
$('#UserSignupForm').live('submit', function(){
var url = $(this).attr('action');
var data = $(this).serialize();
$.post(url,data,function(res){
$(this).find('.error').removeClass('error');
$(this).find('.error-message').remove();
if (res.status == 0) {
$('input[type!=submit]').each(function(){
var elt = $(this);
var field = elt.attr('id');
if(res[field]){
elt.parent().addClass('error');
$('<div class="error-message">').html(res[field][0]).appendTo(elt.parent());
}
});
} else if(res.status == 1) {
$(this).remove();
$('<div class="success">').html('Vous êtes maintenant enregistré !').appendTo('.container');
}
},'json');
return false;
});
});
[/code]
Par ailleurs, lorsque j'ai une erreur dans un de mes champs, le validate me renvoi parfois deux fois le même message d'erreur, pourquoi ?
[code]
Array
(
[username] => Array
(
[0] => Votre pseudo n'est pas valide
[1] => Votre pseudo n'est pas valide
)
[password] => Array
(
[0] => Vous devez entrer un mot de passe
[1] => Vous devez entrer un mot de passe
)
[mail] => Array
(
[0] => Votre email n'est pas valide
[1] => Votre email n'est pas valide
)
[status] => 0
)
[/code]