2014-12-16 3 views
1

Я ищу эквивалент реализации MVC в функциональности обработчиков запросов WebForms Аякса ниже:.ASP.NET MVC действий на синхронном AJAX запросов

Sys.WebForms.PageRequestManager.getInstance() add_beginRequest (функция()) ;
Sys.WebForms.PageRequestManager.getInstance(). Add_endRequest (function());

Ответ на очень похожий вопрос (ссылка ниже) был дан ссылкой на глобальные обработчики событий .ajax, но поскольку все мои вызовы синхронны, у меня возникла проблема с тем, что он запускает завершенное событие ajax в конце каждый отдельный запрос ajax, и я хочу, чтобы он начинался с первого и заканчивается, когда окончательный заканчивается. Я пробовал использовать ajaxStart и ajaxStop, которые предлагает документация, именно то, что я ищу, но я верю, что они будут работать только по назначению с асинхронными запросами aynax.

(ASP.NET MVC 4 Action on AJAX Request)

Есть ли способ сделать это с помощью JQuery встроенного в Ajax обработчиков событий, или какой-либо альтернативный метод для синхронных запросов?

ответ

1

Вы можете использовать JQuery-х .when (в сочетании с .apply), который позволяет выполнять функцию обратного вызова на основе любого числа отсроченных объектов (которые возвращаются с помощью JQuery .ajax вызовов). Посмотрите скрипку и откройте инструменты для разработчиков, если вы посмотрите журнал, вы увидите правильный порядок событий. Запускается первый «начальный», затем записывается несколько сообщений «ajax response», и, наконец, «полное» сообщение регистрируется в конце всех запросов.

Fiddle:http://jsfiddle.net/efjmcm49/

var ajaxCalls = []; 
console.log('started'); 
for(var i = 1; i <= 5; i++){ 
    var currentCall = $.ajax({ 
     url: '/echo/json', 
     type: 'GET', 
     success:function(data){ 
      console.log('ajax response'); 
     } 
    }); 

    ajaxCalls.push(currentCall); 
} 

$.when.apply($, ajaxCalls).done(function() { 
    console.log('complete'); 
}); 
1

В серии синхронных запросов jQuery не может знать, когда вы закончите делать все из них. Как он узнает, что вы не собираетесь начать еще один?

Если запросы синхронны, вы не можете использовать обычный программный поток? Как:

ajaxStart(); //execute arbitrary code 

while(condition) { 
    //ajax requests here 
} 

ajaxStop(); //execute arbitrary code 
+0

Да, однако я помещал код на materpage для индикатора ожидания, который я хочу показать во время всех запросов ajax. Я думаю, что это больше на треке, который я должен искать, но – AlexF

0

JQuery не имеют ничего встроенный подобное, но вы можете сделать одну вещь, возьмите один счетчик и инициализации с 0 и в каждом ajaxstart можно увеличить на 1 и в успехе/ошибке ajax счетчик декремента на 1, и как только вы получите значение счетчика, так как 0 означает, что все запросы завершены.

+0

Да, вы правы. Спасибо – Ravi

+0

Это именно то, что я сделал сначала, однако счетчик затем просто чередует между 1 и 0 – AlexF

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