2013-01-18 16 views
6

Nie jestem pewien, czy jest to w ogóle możliwe, ale mam formularza AJAX jak ta ryba:Kliknięcie Powrót po fancybox AJAX Form Składanie

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

na mojej stronie internetowej, że działa poprawnie. Robię proste sprawdzanie poprawności w formie za pomocą JavaScript, ale jeśli użytkownik przejdzie przez JavaScript, użytkownik jest prezentowany na stronie internetowej Campaign Monitor: albo mówiąc yay, albo nie na ich walidacji.

Po pomyślnym zasubskrybowaniu przez użytkownika, jeśli użytkownik kliknie wstecz lub użyje odsyłacza wstecznego CM, pole "Niechcący" pozostanie wypełnione danymi. Na podstawie tego, jak napisałem scenariusz, powinien on zostać zamknięty po przesłaniu.

To zachowanie Firefoksa w systemach Linux i Windows. Chrome faktycznie czyści stronę i usuwa formularz fancyBox. Sekcja AJAX jest tutaj:

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

Więc mimo dodając:

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

do skryptu AJAX, nie mogę zmusić go do zamknięcia po przedstawieniu.

EDIT

Należy zauważyć również, że zjawisko to wydaje się występować z Firefox, Safari i Opera. Chrome zachowuje się tak, jak oczekiwałbym (np. Po kliknięciu linku wstecznego otrzymuję ponowne załadowanie nowej strony). Strona CM używa javascript:history.go(-1) do odesłania mnie.

Odpowiedz

2

Nie mam pojęcia o monitorze kampanii, ale dlaczego nie zmuszać do zamknięcia fancyboksu podczas ładowania dokumentu?

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

Problem polega na tym, że klikam łącze CM (które używa 'javascript: history.go (-1)'), aby wrócić, strona nie przeładowuje się ponownie, ponieważ używam wyskakującego okna AJAX fancyBox. Wygląda na to, że istnieje w tym samym stanie, w jakim go zostawiłem. A ponieważ używam strony HTML dla zawartości, dodanie do niej zamykającej funkcji zamyka fancyBox, zanim będzie można go otworzyć. – nicorellius

+0

history.go (-1) również powinien przeładować stronę. Czy możesz spróbować dołączyć do "kompletnego" połączenia zwrotnego, a nie sukcesu. Lub zamiast wewnątrz połączenia .ajax, możesz wywołać .close zaraz po wywołaniu .ajax. Przypuszczam, że wywołałoby to twoje połączenie ajax z fancybox closed –

2

Wygląda na to może być chęć kod z odpowiedzią na to: How to close fancybox after Ajax Submit?

(Oto część ekstrahowany & zmodyfikowany)

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

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

Chciałbym też spróbować prostego alert() lub conosle.log() w funkcji powodzenia, aby ustalić, że otrzymujesz zdarzenie zakończone sukcesem, jeśli otrzymujesz zdarzenie, wiesz, że jest to konkretny problem z kodem, którego używasz do ukrycia f ancybox.

+0

Dzięki za odpowiedź. Poszedłem naprzód i próbowałem tego, co sugerowałeś. Jak podejrzewam, moja funkcja sukcesu nie wydaje się być wywołana, ponieważ 'alert()' i 'console.log()' nie dają nic. – nicorellius

+0

używasz firebug do debugowania twojego javascript? Powinieneś patrzeć na konsolę podczas testowania, ponieważ może to być po prostu błąd JS gdzieś, co powoduje, że zdarzenie powodzenia się nie uruchamia? – acSlater

+0

Spróbuj także dodać procedurę obsługi błędów i zobacz, co się stanie z błędem - http: // jsfiddle.net/YAAJd/1/- to nie powiedzie się w jsfiddle z powodu błędu z powodu zasad międzydomenowych, ale stosuje się do twojego kodu i daj mi znać wyniki! – acSlater