2010-10-26 85 views
10

用戶第一次訪問我的網站時,我使用幾個Ajax調用從各種來源獲取大量信息。如何在ajax調用完成後重新加載頁面?如何在所有ajax調用完成後重新加載頁面?

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; 
           } 
         } 
       }); 
      } 
    }); 
} 

因此,代碼確實是什麼,它就會預定義的標識符的列表的新用戶(populateData功能),並使用它們來獲取從第三方服務(getInformation功能)的更多信息。這個getInformation函數查詢第三方服務器,一旦服務器返回一些數據,它會通過另一個Ajax調用將該數據發送到我的服務器。現在我需要的是一種方法來確定何時完成所有ajax調用,以便我可以重新加載頁面。有什麼建議麼?

回答

32

在你getInformation()叫你可以調用location.reload()success回調,像這樣:

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

等到任何進一步 Ajax調用完成後,就可以使用ajaxStop event,就像這樣:

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

謝謝。但是如果在getInformation函數中'success'回調中的一些ajax調用我的服務器仍然處於未決狀態呢?這不是僅僅刷新頁面而沒有考慮到這一點?或者我錯過了什麼? – Legend 2010-10-26 01:54:30

+0

@Legend - 是的,如果你想延遲,直到它們全部完成,只要執行'$(document).ajaxStop(function(){location.reload(true);});'這些請求完成。 – 2010-10-26 01:55:44

+0

這樣做總有道理,但由於某種原因,當我插入此調用時,頁面始終刷新。 – Legend 2010-10-26 02:00:58

0

你可以重定向到server.php文件中使用頭('Location:html-page')定義函數的同一頁面;

相關問題