2010-02-02 44 views
5

Sau khi nhấp vào nút tôi muốn kích hoạt cuộc gọi Ajax và sau đó chuyển hướng đến các trang khác mà không cần chờ kết quả ajax. Có thể không? Mã của tôi như sau:jQuery Ajax: chuyển hướng đến các trang khác mà không cần đợi kết quả

$('button').click(function(){ 
    $.get('mailer.php', function(){ 
     window.location.replace("result.php"); 
    }); 
}); 

Đoạn mã trên sẽ đợi kết quả ajax trước khi chuyển hướng. Tôi có thể để ajax chạy ở phía sau và chuyển sang các trang khác không?

+0

+1 Chào mừng bạn đến với StackOverflow, @Kelvin! – Sampson

Trả lời

2

Dường như tập lệnh bạn đang AJAX đang gửi đang gửi e-mail. Tôi có thể thấy cách chờ đợi để hoàn thành sẽ dẫn đến sự chậm trễ về kết thúc của người dùng. Đây là cách tôi thường giải quyết vấn đề này:

Thay vì có kịch bản mailer.php của bạn ngay lập tức gửi e-mail, lưu trữ dữ liệu thư trong db của bạn. Không gửi e-mail trong khi gọi AJAX. Điều này sẽ dẫn đến một quá trình rất nhanh cho người dùng.

Sau đó, bạn có thể thiết lập công việc CRON trỏ đến tập lệnh bạn đã tạo đặc biệt để gửi e-mail đã được lưu trữ trong DB.

Có ý nghĩa?

+0

cảm ơn! Công việc ngô dường như là cách tốt hơn để xử lý tình huống của tôi :) – Kelvin

2

Nếu bạn chuyển sang trang khác, kết nối với máy chủ có thể bị xóa (không có quy tắc nào ngăn trình duyệt làm như vậy) và hành động có thể không được hoàn tất. Trong ngắn hạn: bạn phải chờ đợi.

+1

Tôi đồng ý. Điều gì sẽ xảy ra nếu có lỗi trong yêu cầu AJAX và biểu mẫu/dữ liệu cần được gửi lại? Bạn muốn được tốt nhất để chờ kết quả, và sau đó chuyển hướng đến trang khác, dựa trên phản hồi từ yêu cầu AJAX. –

1

Nếu bạn rời khỏi ngay lập tức, yêu cầu sẽ bị hủy. Bạn sẽ cần phải bao gồm logic trên máy chủ để giữ cho bất kỳ quá trình nào đi mà được bắt đầu bởi yêu cầu ajax jquery.

Ví dụ: trong PHP có chức năng ignore_user_abort(), trong đó, khi được đặt thành true, sẽ tiếp tục quá trình ngay cả sau khi người dùng đã hủy yêu cầu.

+0

Điều gì sẽ xảy ra nếu trình duyệt không thực hiện yêu cầu, vì vị trí đã thay đổi? Không có gì đảm bảo rằng nó sẽ bắt đầu yêu cầu. Điều gì sẽ xảy ra nếu chỉ một nửa trong số đó (hai tiêu đề đầu tiên cho exaple) được gửi vì độ trễ? –

+0

Theo OP, yêu cầu được thực hiện * trước * thay đổi vị trí. – Sampson

Các vấn đề liên quan