Hello,
En train d'implémanter une fonctionnalité "follow" en Ajax et je me demandais si c'était possible de récupérer un message d'erreur setFlash du controller -> vers le script JS qui serai chargé de l'afficher si la requête s'est bien déroulée.
voici ce que je fais sur le JS
// Clic sur le bouton suivre (follow)
$(document).on("click", ".follow", function (event){
event.preventDefault();
var $this = $(this);
$this.addClass('spinner');
// On récupère l'id du User à suivre
var to_follow_id = $(this).data('id');
// on lance la fonction ajax qui appelle l'action follow du controller user
$.ajax({
type: $this.attr('data-action'),
url: $this.attr('data-ref')
}).done(function() {
// Si tout se passz bien
// On affiche le message flash de succès et l'affiche
}).fail(function() {
// Si il y a un problème
//on affiche les message d'erreur
});
return false;
});
Salut,
Dans ton cas, pourquoi utiliser les messages flash et non pas un message "classique".
En gros :
public function getDataAnyway(){
$response = []; //Tableau que l'on renvoit
$success = $this->Model->save($this->request->data); //Insert en base
$response['success'] = $success;
if($success){
$response['message'] = "C'est ok pour moi";
}else{
$response['message'] = "Il s'est passé un truc, mais pas cool";
}
$this->set('response', $response);
$this->set('_serialize', array('response'));
}
Et dans ton JS (le code n'est pas juste, mais c'est pour donner une idée).
$.ajax({
type: $this.attr('data-action'),
url: $this.attr('data-ref')
}).done(function(retour) {
$("#superid").text(retour.message)
});
return false;
});
Après il est vrai que tu pourrais utiliser les messages FLASH au cas où l'utilisateur n'ai pas Javascript d'activé (ce qui reste rare de nos jours).
Mais j'opterais pour cette solution personnellement.
Je ne savais tout simplement pas récupérer un message HTML depuis mon controller PHP en ajax... merci beaucoup, tu m'as mis sur la voie. Tout simplement j'ai finalement fait un echo du message de notification à la fin de la fonction dans le controller :
// traitement de la requête dans mon controller
function follow() {
If($success) {
$notif = "Mon message de succès";
}
else{
$notif = "Mon message d'échec";
}
echo $notif
}
Comme c'est retournée dans la réponse Ajax, je récupère dans le JS et j'affiche en faisant ceci :
//Clic sur le bouton suivre (follow)
$(document).on("click", ".follow", function (event){
event.preventDefault();
$.ajax({
type: $this.attr('data-action'),
url: $this.attr('data-ref')
}).done(function(response) {
// injecte le message flash de succès et l'affiche
var successMessage = response;
$('#message').html(successMessage);
$('#message').fadeIn();
}).fail(function(response) {
var errorMessage = response;
$('#message').html(errorMessage);
$('#message').fadeIn();
});
return false;
});
Encore Merci à toi PallMallShow !
Bosstyweb,
Je te conseil tout de même de retourner un joli JSon formaté ;)
C'est beaucoup plus propre ^^
C'est pas faux :) Merci beaucoup de tes lumières et du conseil PallMallShaow.