Использование обратного вызова ajaxStop для установки doument.location - PullRequest
0 голосов
/ 27 сентября 2010

У меня есть несколько асинхронных вызовов jquery, вызываемых в цикле. В конце последнего вызова я хочу, чтобы страница обновилась, чтобы показать результаты после вызова. То, что у меня есть, не работает. Буду признателен за помощь в том, почему он не работает, или в лучшем решении!

Спасибо.

var ajaxCount = 0;

$(document).ready(function () {


    $(document).ajaxStart(function () {
        ajaxCount = 1;
    });
    $(document).ajaxStop(function () {
        ajaxCount = 0;
    });
}

function(){
    for(x loops){
        $ajax({...});
    }
    while (ajaxCount != 0) { }
    document.location = applicationRoot + 'Qc.mvc/ViewQc/' + batchId + '/1';

}

Ответы [ 2 ]

2 голосов
/ 27 сентября 2010

.ajaxStop() срабатывает, когда все одновременные запросы Ajax завершены, поэтому вы можете просто использовать его напрямую, например:

function(){
  $(document).ajaxStop(function() {
    window.location.href = applicationRoot + 'Qc.mvc/ViewQc/' + batchId + '/1';
  });
  $ajax({...});
}

Если вам нужно количество активных запросов AJAX, jQuery уже поддерживает это, просто не публикует его ... это фактически то, что используется для определения, когда запускать события ajaxStart и ajaxStop. Вы можете получить доступ через $.active. В jQuery 1.5+ он перемещается в $.ajax.active.

0 голосов
/ 27 сентября 2010

Почему бы не поместить window.location.href = .... в функцию обратного вызова этого конкретного вызова ajax?

$(document).ajaxStart(function () {
    ajaxCount = ajaxCount + 1;
});
$(document).ajaxStop(function () {
    ajaxCount = ajaxCount - 1;
    if (ajaxCount == 0 && check if they're all fired)
            window.location.href = ...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...