2011-02-03 5 views
-1

Dans mon application sur l'élément fancybox cliquez sur Je suis AJAX en chargeant une page html. Mais sur cette page distante j'ai aussi une logique javascript qui utilise AJAX (je sais que c'est bizarre) pour charger des données sur le chargement de la page. En ce moment je ne veux pas montrer la boîte de dialogue de fancybox ou juste continuer à montrer l'animation de chargement jusqu'à ce que les données à l'intérieur de la page distante soient complètement chargées. Y a-t-il un moyen de faire cela? Ce que j'ai jusqu'ici est vraiment moche - je charge une page vide qui est montrée dans la boîte de dialogue de fancybox et après que quelques secondes le contenu sur cette page soit chargé. Et à cause de cela, j'ai des problèmes de dimensions et de centrage.jQuery FancyBox fin AJAX chargement

+0

aucune infraction, mais semble que vous devez repenser un peu ... pourquoi le double ajax? le second ne peut-il pas être un appel curl (insert equivalent) côté serveur? – JohnO

+0

@JohnO, c'est le problème, dans ce cas, je ne peux pas mettre de code côté serveur, les problèmes ASP.NET. –

Répondre

0

$.fancybox.showActivity() et $.fancybox.hideActivity() sont vos amis. Appelez-les séquentiellement selon vos besoins. Par exemple, vous pouvez appeler $ .fancybox.showActivity() comme rappel à votre appel ajax (lorsque la boîte initiale est affichée) pour que le préchargeur/l'animation réapparaisse et appeler $ .fancybox.hideActivity() lorsque la page désirée/les données sont récupérées à partir d'un appel ajax ultérieur, pour faire disparaître l'animation.

+0

ils ne font rien d'autre que de montrer simplement l'animation, dans mon cas, je veux arrêter la boîte de dialogue fancybox de montrer jusqu'à ce que le contenu est chargé. –

+0

Vous avez dit: _Droite maintenant je ne veux pas afficher la boîte de dialogue fancybox ** ou continuer à afficher l'animation de chargement jusqu'à ce que les données de la page distante soient complètement chargées. ** Y a-t-il un moyen de le faire? sera affiché jusqu'à ce que les données finales soient chargées! –

+0

@ user253011, oui, je l'ai dit, mais en 'continuant à montrer l'animation de chargement', je ne voulais pas montrer une boîte de dialogue vide et montrer une animation en plus. –

0
rappel

try comme ceci:

$('a.magical').fancybox({ 'callBackOnShow': function() { $('#fancybox-wrap').hide(); $.fancybox.showActivity(); } });

avec votre a.magical remplacer ancre id/classe et ajoutez vos configurations de FancyBox à elle.

+0

'$ ('# fancybox-wrap'). Hide()' n'est pas une option pour moi, car la boîte de dialogue fancybox était déjà initialisée à ce stade et sa largeur et sa hauteur étaient déjà définies. Changer le contenu de cette boîte de dialogue après cette étape est un hack vraiment pénible. Je veux que la fonction show de fancybox soit déclenchée après mon propre événement ajax complete. –

0

D'accord, voici comment cela fonctionnerait: [EN UTILISANT CUSTOM AJAX] faire d'abord un jquery personnalisé appel ajax suivi du .fancybox.showActivity $(), en cliquant sur le bouton fancybox pour aller chercher la page intérimaire . lorsque l'appel ajax est fait à partir de la page intérimaire, remplir les données dans un div caché et faire un appel de suite pour l'appel d'ouverture fancybox tapé en ligne (par opposition à l'ajax un) (utiliser une ancre cachée/vide juste pour déclencher la fancybox ouverture de l'action, puis appelez $ ('# hidden_a'). click()). Le préchargeur sera fermé une fois la fancybox affichée.