2010-10-26 9 views
10

В первый раз, когда пользователь посещает мой сайт, я собираю много информации из разных источников, используя пару аякс-вызовов. Как перезагрузить страницу после завершения вызовов 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

Спасибо. Но что, если некоторые вызовы ajax на мой сервер внутри обратного вызова 'success' в функции' getInformation' все еще находятся на рассмотрении? Разве это не просто обновит страницу, не учитывая этого? Или я чего-то не хватает? – Legend

+0

@Legend - Да, если вы хотите отложить до тех пор, пока все не закончите, просто сделайте '$ (document) .ajaxStop (function() {location.reload (true);});' и будет выполняться, когда все эти запросы завершены. –

+0

Это имеет смысл, но по какой-то причине, когда я вставляю этот вызов, страница постоянно обновляется. – Legend

-1
+0

Я могу посмотреть, что вы получаете, но вы должны попытаться повторить, что демонстрирует ваша ссылка. Я предполагаю, что вы хотите сказать, что document.location.reload (true) работает не так, как ожидалось, на страницах с данными POST? –

0

Вы могли бы просто перенаправить на той же странице в файле server.php где функция определяется с помощью заголовка («Location: HTML-страницы»);

Смежные вопросы