2010-10-26 31 views
10

Lần đầu tiên một người dùng truy cập vào trang web của tôi, tôi đang lấy rất nhiều thông tin từ nhiều nguồn khác nhau bằng cách sử dụng một vài cuộc gọi ajax. Làm cách nào để tải lại trang khi các cuộc gọi ajax được thực hiện?Làm cách nào để tải lại trang sau khi tất cả các cuộc gọi ajax hoàn tất?

if(userVisit != 1) { 
    // First time visitor 
    populateData(); 
} 

function populateData() { 
    $.ajax({ 
      url: "server.php", 
      data: "action=prepare&myid=" + id, 
      dataType: "json", 
      success: function(json) { 
       if(json.error) { 
        return; 
       } 
       _id = response[json].id; 
       getInformation(_id); 
      } 
    }); 
} 

function getInformation(id) { 
    $.ajax({ 
      url: "REMOTESERVICE", 
      data: "action=get&id=" + id, 
      dataType: "json", 
      success: function(json) { 
       if(json.error) { 
        return; 
       } 

       $.ajax({ 
         url: "server.php", 
         data: "action=update&myid=" + id + '&data=' + json.data.toString(), 
         dataType: "json", 
         success: function(json) { 
           if(json.error) { 
            return; 
           } 
         } 
       }); 
      } 
    }); 
} 

Vì vậy, những gì các mã này là, nó được một danh sách các định danh được xác định trước cho một người dùng mới (populateData chức năng) và sử dụng chúng để lấy thêm thông tin từ một dịch vụ thirdparty (getInformation chức năng). Hàm getInformation này truy vấn một máy chủ của bên thứ ba và khi máy chủ trả về một số dữ liệu, nó sẽ gửi dữ liệu đó đến máy chủ của tôi thông qua một cuộc gọi ajax khác. Bây giờ những gì tôi cần là một cách để tìm ra khi tất cả các cuộc gọi ajax đã được hoàn thành để tôi có thể tải lại trang. Bất kỳ đề xuất?

Trả lời

32

Trong getInformation() của bạn gọi cho bạn có thể gọi location.reload() trong success callback của bạn, như thế này:

success: function(json) { 
    if(!json.error) location.reload(true); 
} 

Để chờ cho đến khi nào cuộc gọi thêm ajax hoàn tất, bạn có thể sử dụng ajaxStop event, như thế này:

success: function(json) { 
    if(json.error) return; 
    //fire off other ajax calls 
    $(document).ajaxStop(function() { location.reload(true); }); 
} 
+0

Cảm ơn. Nhưng nếu một số cuộc gọi ajax đến máy chủ của tôi bên trong cuộc gọi lại 'success' trong hàm' getInformation' vẫn đang chờ xử lý thì sao? Điều này sẽ không làm mới trang mà không xem xét điều đó? Hay tôi đang thiếu một cái gì đó? – Legend

+0

@Legend - Có, nếu bạn muốn trì hoãn cho đến khi chúng được thực hiện xong, chỉ cần làm '$ (document) .ajaxStop (function() {location.reload (true);});' và nó sẽ thực thi khi tất cả những yêu cầu đó hoàn thành. –

+0

Điều đó hoàn toàn hợp lý nhưng vì một số lý do, khi tôi chèn cuộc gọi này, trang luôn làm mới mọi lúc. – Legend

-1
+0

Tôi có thể thấy những gì bạn đang nhận được nhưng bạn nên cố gắng nhắc lại những gì liên kết của bạn thể hiện. Tôi đoán bạn có nghĩa là để nói document.location.reload (true) không hoạt động như mong đợi trên các trang có dữ liệu POST? –

0

Bạn chỉ có thể chuyển hướng đến cùng một trang trong tệp tin server.php nơi hàm được xác định bằng tiêu đề ('Vị trí: trang html');

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