2013-01-18 52 views
6

Không chắc nếu điều này thậm chí còn có thể, nhưng tôi có một hình thức AJAX như fiddle này:Nhấp Trở lại sau Fancybox AJAX Mẫu thông

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

Trên trang web của tôi, nó đang làm việc tốt. Tôi thực hiện xác nhận đơn giản trong biểu mẫu bằng JavaScript, nhưng nếu người dùng nhận được thông qua JavaScript, người dùng được hiển thị trang web Campaign Monitor: hoặc nói yay hoặc nay để xác thực của họ.

Khi người dùng đăng ký thành công, nếu người dùng nhấp lại hoặc sử dụng liên kết quay lại CM, hộp ưa thích sẽ vẫn còn với dữ liệu được điền. Dựa trên cách tôi có kịch bản được viết nó nên đóng sau khi gửi.

Đây là hành vi của Firefox trong Linux và Windows. Chrome thực sự xóa trang và xóa biểu mẫu fancyBox. Phần AJAX là ở đây:

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

Vì vậy, mặc dù nói thêm:

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

để kịch bản AJAX, tôi không thể làm cho nó đóng sau khi nộp.

EDIT

tôi nên lưu ý, quá, mà hiện tượng này dường như xảy ra với Firefox, Safari và Opera. Chrome hoạt động như tôi mong đợi (ví dụ: khi nhấp vào liên kết quay lại, tôi sẽ tải lại trang mới). Trang CM đang sử dụng javascript:history.go(-1) để gửi lại cho tôi.

Trả lời

2

Tôi không có ý tưởng gì về Giám sát chiến dịch nhưng tại sao không buộc đóng hộp ưa thích của bạn khi tải tài liệu?

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

Vấn đề là khi tôi nhấp vào liên kết CM (sử dụng 'javascript: history.go (-1) ') để quay lại trang không tải lại, bởi vì tôi đang sử dụng cửa sổ bật lên fancyBox AJAX. Nó dường như tồn tại trong cùng một trạng thái như khi tôi rời nó. Và kể từ khi tôi đang sử dụng một trang HTML cho nội dung, thêm chức năng đóng để đóng fancyBox trước khi nó có thể mở. – nicorellius

+0

history.go (-1) cũng nên tải lại trang. Bạn có thể thử gắn vào gọi lại 'hoàn thành', chứ không phải là thành công. Hoặc thay vì bên trong cuộc gọi .ajax của bạn, bạn có thể gọi .đóng ngay sau cuộc gọi .ajax của bạn. Tôi đoán nó sẽ khởi động cuộc gọi ajax của bạn với fancybox đóng –

2

Dường như bạn có thể muốn mã từ câu trả lời cho điều này: How to close fancybox after Ajax Submit?

(Đây là phần đã trích & sửa đổi)

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

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

Tôi cũng sẽ cố gắng đơn giản alert() hoặc conosle.log() trong chức năng thành công của bạn để xác định bạn đang nhận được sự kiện thành công, nếu bạn nhận được sự kiện thì bạn biết đó là vấn đề cụ thể với mã bạn đang sử dụng để ẩn f ancybox.

+0

Cảm ơn câu trả lời. Tôi đã đi trước và thử những gì bạn đề nghị. Theo nghi ngờ, hàm thành công của tôi dường như không được gọi, vì 'alert()' và 'console.log()' không đưa ra bất cứ điều gì. – nicorellius

+0

bạn có đang sử dụng firebug để gỡ lỗi javascript của mình không? Bạn nên nhìn vào giao diện điều khiển trong khi thử nghiệm vì nó có thể chỉ đơn giản là một lỗi JS ở đâu đó gây ra sự kiện thành công không cháy? – acSlater

+0

Ngoài ra, hãy thử thêm trình xử lý lỗi và xem lỗi đang xảy ra - http: // jsfiddle.net/YAAJd/1/- điều này sẽ thất bại trong jsfiddle với một lỗi vì các chính sách tên miền chéo nhưng áp dụng cho mã của bạn và cho tôi biết kết quả! – acSlater