Ajax et framework Jquery :: actions en cascade
1 message
• Page 1 sur 1
-

Mountain Magazin - WRInaute impliqué

- Messages: 598
- Inscription: 1 Oct 2004
Ajax et framework Jquery :: actions en cascade
Salut à tous,
J'ai besoin d'un petit conseil :
J'utilise parfois le framework Jquery, qui est très bien, notamment pour certaines requêtes ajax en POST ou des effets graphiques.
Je suis assez friand des interfaces en ajax, qui permettent de gérer son compte sans recharger la page, je trouve cela terriblement confortable, un peu comme Gmail.
Je sais que cela est à éviter sur la partie publique du site et que lorsque c'est le cas, il faut des liens JS valides qui puissent est suivis pas les moteurs (type <a href="lien.html" onclick="action via ajax">). Là n'est pas le débat.
En fait mon souci, c'est par exemple lorsqu'un utilisateur met en ligne une nouvelle promotion, via ajax, à la validation j'affiche dans un DIV le résultat de la page php appelée :
Jusque là pas de souci. Par contre, la difficulté, c'est que là on test le succès de la requête ajax, mais pas le succès de l'opération qui se déroule en php en arrière plan.
J'en ai besoin car je veux déclencher d'autres actions en cas de succès, comme l'insertion de la nouvelle promo dans le flux de la page. Alors, j'ai trouvé une solution, qui est la suivante (mais que je ne trouve pas très propre) :
En fait, je récupère le résultat de la requête dans une variable, et je compare avec le résultat attendu pour vérifier le succès ou non. ensuite, si c'est le cas, j'appelle un autre script qui exécute une autre action dans un deuxième temps, via un autre script :
Donc, si le message généré par php est le message de succès attendu, alors ensuite on exécute un nouveau script qui récupère la dernière insertion dans la BDD puis l'insère dans le DOM
Comme à chaque ligne sont associées des actions (delete, edit...) et qu'il faut que les éléments insérés en ajax soient reconnus par le framework pour pouvoir ensuite agir dessus sans recharger la page, j'utilise l'excellent plugin live query
$("#submitpromo").livequery('click',function() {
});
Voilà, donc en fait, j'arrive très bien à faire ce que je veux, mais je me demande s'il n'existe pas d'autres méthodes plus simples, plus propres que de comparer le code html de la réponse du script, pour savoir la suite à donner.
Toute la difficulté dans ces cas là, c'est de gérer plusieurs actions à plusieurs endroits, au sein d'une même page. Je sais en clair récupérer la réponse serveur, mais pas plusieurs réponses simultanées, et les différencier. Je suis donc pour l'instant obligé de procéder ainsi. A moins que quelqu'un ne connaisse une autre technique qui m'aurait échappée.
Si personne a mieux, ça pourra donner des idées à certains pour leurs scripts.
J'espère avoir été clair.
Merci.
J'ai besoin d'un petit conseil :
J'utilise parfois le framework Jquery, qui est très bien, notamment pour certaines requêtes ajax en POST ou des effets graphiques.
Je suis assez friand des interfaces en ajax, qui permettent de gérer son compte sans recharger la page, je trouve cela terriblement confortable, un peu comme Gmail.
Je sais que cela est à éviter sur la partie publique du site et que lorsque c'est le cas, il faut des liens JS valides qui puissent est suivis pas les moteurs (type <a href="lien.html" onclick="action via ajax">). Là n'est pas le débat.
En fait mon souci, c'est par exemple lorsqu'un utilisateur met en ligne une nouvelle promotion, via ajax, à la validation j'affiche dans un DIV le résultat de la page php appelée :
- Code: Tout sélectionner
$.ajax({
type: "POST",
url: "include/gestion-promos/gestion_promo.php",
data: ser, //Serialise
success: function(html){
$("#reponsepromo").empty(); //On vide le contenu du div à chaque occurence de test pour éviter le cumul des messages d'erreur
$("#reponsepromo").append(html);//On charge le message d'erreur en provenance du script PHP de traitement
} //--\\success
}); //--\\$.ajax
Jusque là pas de souci. Par contre, la difficulté, c'est que là on test le succès de la requête ajax, mais pas le succès de l'opération qui se déroule en php en arrière plan.
J'en ai besoin car je veux déclencher d'autres actions en cas de succès, comme l'insertion de la nouvelle promo dans le flux de la page. Alors, j'ai trouvé une solution, qui est la suivante (mais que je ne trouve pas très propre) :
- Code: Tout sélectionner
$.ajax({
type: "POST",
url: "include/gestion-promos/gestion_promo.php",
data: ser, //Serialise
success: function(html){
$("#reponsepromo").empty(); //On vide le contenu du div à chaque occurence de test pour éviter le cumul des messages d'erreur
$("#reponsepromo").append(html);//On charge le message d'erreur en provenance du script PHP de traitement
var not = document.getElementById('reponsepromo').innerHTML; //On récupère le contenu du div pour voir si message d'erreur après traitement php
if ( not == "<p>Votre discount a bien été ajouté !</p>" ) { //Si pas de message d'erreur, on lance l'affichage de la promo
$.post("include/gestion-promos/gestion_promo.php",
{ id_camp: "<?php print ( $_GET['camp'] ); ?>", action: "readProm" },
function(html){
$("#reponsepromo").fadeOut(6000);
$("#adpromotion").fadeOut(4000); //on fait disparaître le div en dégradé
$("#disparait").empty(); //On vide le div qui dit éventuellement qu'il n'y a pas encore de promo
$("#addajaxpromo").append(html);//On charge le message d'erreur en provenance du script PHP de traitement
}
); //-- $.post
}
} //--\\success
}); //--\\$.ajax
En fait, je récupère le résultat de la requête dans une variable, et je compare avec le résultat attendu pour vérifier le succès ou non. ensuite, si c'est le cas, j'appelle un autre script qui exécute une autre action dans un deuxième temps, via un autre script :
- Code: Tout sélectionner
var not = document.getElementById('reponsepromo').innerHTML; //On récupère le contenu du div pour voir si message d'erreur après traitement php
if ( not == "<p>Votre discount a bien été ajouté !</p>" ) { //Si pas de message d'erreur, on lance l'affichage de la promo
Donc, si le message généré par php est le message de succès attendu, alors ensuite on exécute un nouveau script qui récupère la dernière insertion dans la BDD puis l'insère dans le DOM
Comme à chaque ligne sont associées des actions (delete, edit...) et qu'il faut que les éléments insérés en ajax soient reconnus par le framework pour pouvoir ensuite agir dessus sans recharger la page, j'utilise l'excellent plugin live query
$("#submitpromo").livequery('click',function() {
});
Voilà, donc en fait, j'arrive très bien à faire ce que je veux, mais je me demande s'il n'existe pas d'autres méthodes plus simples, plus propres que de comparer le code html de la réponse du script, pour savoir la suite à donner.
Toute la difficulté dans ces cas là, c'est de gérer plusieurs actions à plusieurs endroits, au sein d'une même page. Je sais en clair récupérer la réponse serveur, mais pas plusieurs réponses simultanées, et les différencier. Je suis donc pour l'instant obligé de procéder ainsi. A moins que quelqu'un ne connaisse une autre technique qui m'aurait échappée.
Si personne a mieux, ça pourra donner des idées à certains pour leurs scripts.
J'espère avoir été clair.
Merci.
1 message
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Framework Ajax/Java
- Framework ajax qui exécute de l'ajax
- [Cherche] Framework JS+Ajax pour afficher des grilles/tableaux
- Jquery Ajax/GET sur un domaine différent
- AJAX JQuery : recharger une page
- Prestashop import des photos en Ajax Jquery
- Codamaniacs: codes en XHTML, Css, JS, Ajax et jQuery
- [JQuery] Chargement AJAX d'une page externe au site ?
- AJAX + JQUERY => récupération automatique de tous les input d'un form
- Redirections en cascade...
Consultez la description détaillée des produits ou services de Google suivants : Google Web Toolkit
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
