2013-01-18 4 views
6

Je ne sais pas si cela est encore possible, mais j'ai une forme AJAX comme ce violon:Retour après le formulaire FancyBox AJAX Soumission

http://jsfiddle.net/nicorellius/GfeEf/

Sur mon site, il fonctionne très bien. Je fais une validation simple sous la forme avec JavaScript, mais si l'utilisateur passe à travers le JavaScript, l'utilisateur est présenté avec une page Web Campaign Monitor: soit dire oui ou non à leur validation.

Lorsque l'utilisateur s'abonne avec succès, si l'utilisateur clique en arrière ou utilise le lien précédent CM, le fancyBox reste avec les données remplies. Basé sur comment j'ai écrit le script, il devrait fermer après soumission.

Ceci est le comportement de Firefox sous Linux et Windows. Chrome efface la page et supprime le formulaire fancyBox. La section AJAX est ici:

$.ajax({ 
    type  : "POST", 
    cache  : false, 
    url  : "http://<comapny_name>.createsend.com/a/b/c/abcdef/", 
    data  : $(this).serializeArray(), 
    // I've tried both of these commented out pieces to no avail. 
    //beforeSend : function() { 
         //$.fancybox.close(true); 
        //}, 
    //success : function(data) { 
         //$.fancybox.close(true); 
        //} 
}); 

Ainsi, malgré l'ajout:

success : function() { 
       $.fancybox.close(true); 
      } 

au script AJAX, je ne peux pas à fermer après la soumission.

EDIT

Je dois souligner aussi que ce phénomène semble se produire avec Firefox, Safari et Opera. Chrome se comporte comme je m'y attends (par exemple, lorsque je clique sur le lien précédent, j'obtiens le nouveau rechargement de la page). La page CM utilise javascript:history.go(-1) pour me renvoyer.

Répondre

2

Je n'ai aucune idée de Campaign Monitor mais pourquoi ne pas forcer la fermeture de votre fancybox sur le chargement de document?

$(document).ready(function(){ 
    $.fancybox.close(true); 
} 
+0

Le problème est lorsque je clique sur le lien CM (qui utilise 'javascript: history.go (-1)') pour revenir à la page ne recharge pas, car j'utilise un popup AJAX fancyBox. Il semble exister dans le même état que lorsque je l'ai quitté. Et puisque j'utilise une page HTML pour le contenu, l'ajout de la fonction de fermeture à cela ferme le fancyBox avant qu'il puisse s'ouvrir. – nicorellius

+0

history.go (-1) devrait également recharger la page. Pouvez-vous essayer d'attacher à callback 'complète', plutôt que de succès. Ou au lieu de l'intérieur de votre appel .ajax, vous pouvez appeler .close juste après votre appel .ajax. Je présume qu'il lancerait votre appel ajax avec fancybox fermé –

2

Il semble que vous manquât le code de la réponse à ceci: How to close fancybox after Ajax Submit?

(Voici la partie extraite & modifiée)

var fancyboxProxy = $.fancybox; //declared before $.ajax 

//and then modify your success to: 
success : function() { 
      fancyboxProxy.close(); 
     } 

Je voudrais aussi essayer simple alert() ou conosle.log() dans votre fonction de réussite pour déterminer que vous recevez l'événement de réussite, si vous recevez l'événement, alors vous savez qu'il est spécifiquement un problème avec le code que vous utilisez pour masquer le f ancybox.

+0

Merci pour la réponse. Je suis allé de l'avant et j'ai essayé ce que vous avez suggéré. Comme suspecté, ma fonction de succès ne semble pas être appelée, car 'alert()' et 'console.log()' ne donnent rien. – nicorellius

+0

utilisez-vous firebug pour déboguer votre javascript? Vous devriez regarder la console pendant le test car il peut s'agir simplement d'une erreur JS quelque part qui empêche l'événement de se déclencher? – acSlater

+0

Essayez également d'ajouter un gestionnaire d'erreurs et de voir ce que l'erreur est à venir - http: // jsfiddle.net/YAAJd/1/- ceci échouera dans jsfiddle avec une erreur à cause des politiques inter-domaines mais s'applique à votre code et fais-moi savoir les résultats! – acSlater

Questions connexes