2013-01-18 5 views
6

nicht sicher, ob dies überhaupt möglich ist, aber ich habe eine AJAX Form wie diese Geige:Klicken auf Zurück nach fancybox AJAX-Formular Submission

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

Auf meiner Website, es gut funktioniert. Ich mache eine einfache Validierung im Formular mit JavaScript, aber wenn der Benutzer durch das JavaScript kommt, wird der Benutzer mit einer Campaign Monitor Webseite konfrontiert: entweder sagen Yay oder Nein zu ihrer Validierung.

Wenn der Benutzer erfolgreich subskribiert wird, wenn der Benutzer zurückklickt oder den CM-Zurück-Link verwendet, bleibt die FancyBox mit Daten gefüllt. Basierend darauf, wie ich das Skript geschrieben habe, sollte es nach der Einreichung geschlossen werden.

Das ist Firefox Verhalten in Linux und Windows. Chrome löscht die Seite tatsächlich und entfernt das fancyBox-Formular. Der AJAX Abschnitt ist hier:

$.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); 
        //} 
}); 

Also trotz Zugabe:

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

auf die AJAX-Skript, kann ich es nicht nach Vorlage zu schließen.

EDIT

Ich sollte auch beachten, dass dieses Phänomen mit Firefox, Safari und Opera auftreten scheint. Chrome verhält sich wie erwartet (z. B. wenn ich auf den Zurück-Link klicke, bekomme ich die neue Seite neu geladen). Die CM-Seite verwendet javascript:history.go(-1), um mich zurückzusenden.

Antwort

2

Ich habe keine Ahnung von Campaign Monitor, aber warum nicht zwingen, Ihre fancybox beim Laden von Dokumenten zu schließen?

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

Das Problem ist, wenn ich auf den CM-Link (die 'javascript: history.go (-1)') verwendet, um die Seite nicht neu zu laden, da ich ein FancyBox AJAX-Popup verwenden. Es scheint in dem Zustand zu existieren, in dem ich es verlassen habe. Und da ich eine HTML-Seite für den Inhalt verwende, schließt das Hinzufügen der close-Funktion die fancyBox, bevor sie geöffnet werden kann. – nicorellius

+0

history.go (-1) sollte auch die Seite neu laden. Können Sie versuchen, einen "vollständigen" Rückruf durchzuführen, anstatt erfolgreich zu sein? Oder anstatt innerhalb Ihres .ajax Anrufs, könnten Sie direkt nach Ihrem .ajax Anruf close aufrufen. Ich nehme an, es würde Ihren Ajax-Anruf mit fancybox geschlossen –

2

Es sieht aus wie Sie den Code aus der Antwort auf diese wollen könnten: How to close fancybox after Ajax Submit?

(Hier ist der Teil extrahierter & geändert)

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

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

Ich würde auch versuchen, ein einfaches alert() oder conosle.log() in Ihrer Erfolgsfunktion zu bestimmen, dass Sie das Erfolgsereignis erhalten, wenn Sie das Ereignis erhalten, dann wissen Sie, dass es speziell ein Problem mit dem Code ist, den Sie verwenden, um die f zu verbergen Ancybox.

+0

Danke für die Antwort starten. Ich ging voran und probierte, was du vorgeschlagen hast. Wie vermutet, scheint meine Erfolgsfunktion nicht aufgerufen zu werden, da die 'alert()' und 'console.log()' nichts geben. – nicorellius

+0

verwenden Sie Firebug, um Ihr Javascript zu debuggen? Sie sollten beim Testen auf die Konsole schauen, da es sich einfach um einen JS-Fehler handelt, der dazu führt, dass das Erfolgsereignis nicht ausgelöst wird. – acSlater

+0

Versuchen Sie auch, einen Fehlerhandler hinzuzufügen, um zu sehen, wo der Fehler auftritt - http: // jsfiddle.net/YAAJd/1/- Dies wird in der Regel mit einem Fehler aufgrund von Cross-Domain-Richtlinien fehlschlagen, sondern gelten für Ihren Code und lassen Sie mich wissen, die Ergebnisse! – acSlater

Verwandte Themen