2010-09-27 4 views
0

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

Спасибо.

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

.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

Проблема в том, что у меня есть другие вызовы ajax на странице, которые я не хочу обновлять после. Его единственный конкретный набор вызовов ajax, который должен запускать обновление страницы. – shaw2thefloor

+0

@ shaw2thefloor - Вот почему я бы привязал * внутри * функцию, о которой вы заботитесь ... вы можете привязать/развязать, когда захотите, например. '$ (document) .unbind ('ajaxStop')' перестанет прослушивать событие. –

+0

А ... Я вижу. Спасибо за это, это сработало. – shaw2thefloor

0

Почему бы не поставить 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 = ... 
}); 
+0

Как я понимаю, есть много вызовов, и он хочет перенаправить, когда они закончили. –

+0

Я бы предложил примерно следующее: $ (document) .ajaxStart (function() { ajaxCount = ajaxCount + 1; }); $ (document) .ajaxStop (function() { ajaxCount = ajaxCount - 1; if (ajaxCount == 0) window.location.href = ... }); – Zilverdistel

+0

Я пробовал это. Я думаю, проблема в цикле while. Кажется, что он попадает в цикл while, а затем никогда не запускает ajaxStop(); Извините, я просто изменил код выше, чтобы сделать его более представительным из того, что происходит. – shaw2thefloor

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