JeuWeb - Crée ton jeu par navigateur
[Résolu][jQuery] Ajax dans l'ajax - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu][jQuery] Ajax dans l'ajax (/showthread.php?tid=3880)

Pages : 1 2


[Résolu][jQuery] Ajax dans l'ajax - phenix - 24-05-2009

Bonjour à tous,

Voila je suis face a une problème:

Mon interface est presque entièrement en Ajax, lorsque des liens sont insérer via cette méthode, on utilise live pour pouvoir changer le contenu de la div qui a déjà servit (Soit on me suis, soit on est perdu >.< )

Par exemple:

$(".Ajax").live('click', function() {
$.ajax({
url : this.href,
dataType : "html",
beforeSend : function(){
$("div.table_center").fadeTo(0,0);
},
success : function(reponse){
$("div.table_center").fadeTo(500,1);
$("div.table_center").html(reponse);
size();

/*modification de la div de la map */
$("div.table_map").css({
top: (posCenter.top)+"px",
left: (posCenter.left+50)+"px"
});
},
error : function(){
$("div.table_center").html("<p>Erreur.</p>");
}
});
return false;
});

Maintenant, utilise un système de "Boite qui s'ouvre", sorte de popup javascript style lightbox, mais simplifier, ce popup s'utilise comme une fonction javascript basique.
openBox(mess,"popup");

Maintenant, je voudrais qu'après l'ouverture du popup, la div change avec Ajax, j'ai donc ajouter:

openBox(mess,"popup");
$.ajax({
url : url,
dataType : "html",
beforeSend : function(){
$("div.table_center").fadeTo(0,0);
},
success : function(reponse){
$("div.table_center").fadeTo(500,1);
$("div.table_center").html(reponse);
size();

/*modification de la div de la map */
$("div.table_map").css({
top: (posCenter.top)+"px",
left: (posCenter.left+50)+"px"
});
},
error : function(){
$("div.table_center").html("<p>Erreur.</p>");
}
});

Mais sa marche pas... il faudrais utiliser la fonction live() car ce code ce trouve dans une div qui a déjà été charger en Ajax, mais je ne sais pas comment faire...

Merci de votre aide,


RE: [jQuery] Ajax dans l'ajax - Allwise - 24-05-2009

Pourquoi ne pas ajouter, en troisième argument à ta fonction openBox, une fonction de callback qui serait exécutée à chaque appel d'OpenBox ?


RE: [jQuery] Ajax dans l'ajax - phenix - 24-05-2009

Désoler, mais je ne sais pas comment on crée une fonction de callback :toilette:

Voici le code de la box:

(function($){
$.valmeBox = {
openBox: function(url, type){
if(type == "ajax"){
$.ajax({
url : url,
dataType: "html",
contentType : "application/x-www-form-urlencoded; charset=ISO-8859-15",
beforeSend: function(){
$("div#popup").fadeIn("slow");
$("div#popup").css({
top: (sourisTop-100)+"px",
left: (posCenter.left)+"px"
});
$("div.main_table").fadeTo("slow",0.4);
},
success : function(reponse){
$("div#popup").html(
"<div class=\"flote_droite\">" +
"<div class=\"flote_gauche\">" +
"<div class=\"flote_haut\">" +
"<div class=\"flote_bas\">" +
"<div class=\"flote_coin_sup_gauche\">" +
"<div class=\"flote_coin_sup_droite\">" +
"<div class=\"flote_coin_inf_gauche\">" +
"<div class=\"flote_coin_inf_droite\">" +
"<div class=\"flote_text\">"+
"<p class=\"closeBox\"><a onclick=\"closeBox();\">X Fermer</a></p>"
+ reponse +
"<p class=\"closeBox\"><a onclick=\"closeBox();\">X Fermer</a></p>"+
"</div>" +
"</div>" +
"</div>" +
"</div>" +
"</div>" +
"</div>" +
"</div>" +
"</div>" +
"</div>"
);
},
error : function(){
$("div#popup").html("<p>Erreur.</p>");
}
});
return false;
}
else if (type == "popup"){
$("div#popup").fadeIn("slow");
$("div#popup").css({
top: (sourisTop-100)+"px",
left: (posCenter.left)+"px"
});
$("div.main_table").fadeTo("slow",0.4);
$("div#popup").html(
"<div class=\"flote_droite\">" +
"<div class=\"flote_gauche\">" +
"<div class=\"flote_haut\">" +
"<div class=\"flote_bas\">" +
"<div class=\"flote_coin_sup_gauche\">" +
"<div class=\"flote_coin_sup_droite\">" +
"<div class=\"flote_coin_inf_gauche\">" +
"<div class=\"flote_coin_inf_droite\">" +
"<div class=\"flote_text\">" +
"<p class=\"closeBox\"><a onclick=\"closeBox();\">X Fermer</a></p>"
+ url +
"<p class=\"closeBox\"><a onclick=\"closeBox();\">X Fermer</a></p>" +
"</div>" +
"</div>" +
"</div>" +
"</div>" +
"</div>" +
"</div>" +
"</div>" +
"</div>" +
"</div>"
);
}
},
closeBox: function(){
$("div#popup").fadeOut("slow");
$("div.main_table").fadeTo("slow",1);
}
}

//Accès rapide
openBox = function(url,type) {
$.valmeBox.openBox(url,type);
}
closeBox = function() {
$.valmeBox.closeBox();
}
})(jQuery);

Merci d'avance


RE: [jQuery] Ajax dans l'ajax - jo_link_noir - 24-05-2009

Et pourtant, t'arrête pas de le faire ^^

openBox: function(url, type, callback) {
//traitement de l'objet
...

//lance la callback
callback(); //on peut également envoyer des paramètres si besoin, comme une fonction en fait
}

openBox(mess,"popup", function(){alert("callback lancer :-p");});

A la place du alert tu mes ton $.ajax(...) et ça devrais le faire

Bonne nuit


RE: [jQuery] Ajax dans l'ajax - Sephi-Chan - 25-05-2009

Je répondrais demain. J'ai pour le moment modifié la forme du code car les tabulations, ça le fait pas du tout. Il faut encore que j'édite un peu le second message mais là je n'ai pas le temps et je ne suis pas sur ma machine.


Sephi-Chan


RE: [jQuery] Ajax dans l'ajax - naholyr - 25-05-2009

Un petit détour par le nommage des variables, j'ai jamais été fan des noms raccourcis qui en général n'apportent aucun avantage mais nuisent à la lisibilité du code. Pour une fois je suis tombé dans l'un des codes présenté ici sur un raccourci qui prète peu à confusion mais qui fait bien rire : "mess" pour "message", c'est assez rigolo pace qu'en anglais ça veut dire en gros "foutoir", du coup l'appel de fonction "openBox(mess)" change un peu de ton genre "allez vas-y ouvre-moi une boite avec tout le foutoir que je te passe là" au lieu de "openDialogBox(message)" qui dirait "ouvre-moi une boite de dialogue avec ce message" Wink

Je repars discrètement après cet intermède étymologique :lol:


RE: [jQuery] Ajax dans l'ajax - phenix - 25-05-2009

Merci j-12, j'ai apprit quelques chose de plus, mais malheureusement sa ne fonctionne pas...

Même avec une simple alert...

Citation :Un petit détour par le nommage des variables, j'ai jamais été fan des noms raccourcis qui en général n'apportent aucun avantage mais nuisent à la lisibilité du code. Pour une fois je suis tombé dans l'un des codes présenté ici sur un raccourci qui prète peu à confusion mais qui fait bien rire : "mess" pour "message", c'est assez rigolo pace qu'en anglais ça veut dire en gros "foutoir", du coup l'appel de fonction "openBox(mess)" change un peu de ton genre "allez vas-y ouvre-moi une boite avec tout le foutoir que je te passe là" au lieu de "openDialogBox(message)" qui dirait "ouvre-moi une boite de dialogue avec ce message" 16

Je repars discrètement après cet intermède étymologique 8

Ouais, tu as raison, mais nous somme des feignants... Et puis sa devient souvent n'importe quoi:

$variableDelArmureDuPersonnageAttaquant

Pour en revenir a mon problème, je pense que cela vient du faite que la div a déjà été charger par Ajax avant...

Merci de votre aide.


RE: [jQuery] Ajax dans l'ajax - phenix - 26-05-2009

J'ai résolut le problème en utilisant la fonction Load plutôt que $.ajax.

Merci de votre aide.


RE: [résolut][jQuery] Ajax dans l'ajax - Sephi-Chan - 26-05-2009

En fait, il doit y avoir une autre méthode, puisque load() utilise ajax().
Cela dit, puisque tu utilises live(), tu ne devrais pas avoir de problème avec le DOM chargé dynamiquement.

Mais en fait je ne comprends pas très bien ce qui est chargé initialement puis ce qui est chargé dynamiquement.


Sephi-Chan


RE: [Résolu][jQuery] Ajax dans l'ajax - phenix - 26-05-2009

Citation :Mais en fait je ne comprends pas très bien ce qui est chargé initialement puis ce qui est chargé dynamiquement.

Je ne travail que dans du charger dynamiquement.