2010-05-02 3 views
3

J'ai un appel AJAX pour charger une fonction une fois la page chargée, la fonction ouvre une lightbox comme une trame avec quelques données. Le problème est que si je clique sur fermer (frame lightbox), la page se charge encore et encore en chargeant le frame pour que l'utilisation n'atteigne jamais la page sous la couche de frame puisque le frame charge sur boucle infinie. L'Ajax répète en appelant la fonction je suppose mais je voudrais charger le cadre une fois et quand l'utilisateur clique sur X (fermer) il peut retourner à la page d'origine.Y a-t-il une seule page pour charger une page avec AJAX?

$(document).ready(function(){ 
var city = $('#citycode').html(); 

$.ajax({ 
//when page is loaded, fire the following function 
success: function(){ 
//the function to be fired located in the page in seperate file 
openX(city + //some other parameters); 
}}); 


}); 

Des conseils?

Répondre

4

Vous pouvez définir une variable globale en haut de la page et le définir à true une fois la page a été chargée, puis plus tard dans votre code, vous vérifiez si la variable est false charger la page pas autrement. Voici le prototype:

<script type="text/javascript"> 

var loaded = false; 

$(document).ready(function(){ 
var city = $('#citycode').html(); 

$.ajax({ 
//when page is loaded, fire the following function 
success: function(){ 
if (loaded === false) 
{ 
    //the function to be fired located in the page in seperate file 
    openX(city + //some other parameters); 
    loaded = true; 
} 
}}); 


}); 
</script> 
+0

Merci beaucoup, je pense que cela pourrait être la meilleure solution, mais je ne suis pas sûr que cela fonctionnera à 100% puisque nous avons le lien Fermer sur le cadre lui-même et non la page. Devons-nous prendre soin de onclick pour ce lien en quelque sorte? – digitup

+0

@digitup: La condition vérifie cela en interne déjà. – Sarfraz

+0

J'ai changé et essayé votre code mais toujours obtenir la boucle infinie une fois que je clique sur le bouton Fermer. D'autres conseils? – digitup

1

Un paramètre "cache" aléatoire peut être ajouté par jQuery pour inhiber la mise en cache. Essayez d'ajouter la propriété cache à true dans l'appel ajax pour autoriser la mise en cache; votre code peut ressembler à ceci:

$.ajax({ 
    cache: false; 
    success: function(...){...}, 
    ... 
}); 
+0

Merci beaucoup, puisque nous chargeons des données en temps réel, le cache peut entraîner des résultats incorrects !! Je ne sais pas, je vais devoir essayer votre approche. Merci pour votre réponse – digitup

1

J'ai interprété votre question d'une manière différente des autres réponses, donc ... :) va ici

Je devine que le bouton Fermer est lien hypertexte, et l'action par défaut (en changeant l'URL de la page), n'est pas empêché? Si cela vous convient, vous devez empêcher l'action par défaut en capturant l'événement click sur le lien et en appelant la méthode preventDefault().

Sans voir votre code, voici le meilleur exemple que je peux donner:

$('div.lightbox').live('click', function (event) { 
    event.preventDefault(); 
}); 

Notez l'utilisation de live() ici.

+0

merci beaucoup, cela ressemble à une solution mais je veux toujours que l'utilisateur puisse fermer le cadre ouvert et atteindre la page normale puisque le cadre est ouvert au-dessus du contenu de la page lui-même. – digitup

+0

Peut-être que je n'ai pas expliqué l'utilisation de 'preventDefault()'. L'action par défaut de cliquer sur une balise d'ancrage consiste à ouvrir l'URL dans son attribut 'href'. L'action par défaut de cliquer sur un bouton de soumission dans un formulaire consiste à soumettre ledit formulaire. Big deal jusqu'à présent. L'appel 'preventDefault()' exécutera toujours tous les gestionnaires d'événements qui ont été liés à l'événement (c'est-à-dire fermant l'image en question), mais empêchera, comme leur nom l'indique, l'action par défaut. par exemple, empêcher le rechargement de la page. – Matt

+0

Merci encore Matt, où est le meilleur endroit pour placer le code qui prend soin du lien? au-dessus de mon code ou après que mon appel ajax a été exécuté? – digitup

Questions connexes