2013-04-29 2 views
0

Мой браузер выполняет запрос ajax/json на сервер, который затем вызывает из нескольких служб для получения данных (занимающих различные промежутки времени), а затем отображает эти данные в браузере ,читать ответ от запроса ajax в блоках до его завершения

Я мог бы дождаться завершения и возвращения всех данных в один большой ход.

В идеале я хотел бы, чтобы он возвращал данные (json) всякий раз, когда каждый из индивидуальных вызовов завершается. Таким образом, я могу отображать их в пользовательском интерфейсе, и если один из вызовов службы занимает много времени, пользователь все равно может смотреть на данные, не глядя на пустой экран.

Я думаю, что его можно получить веб-страницу или обработчик ASP.NET для отправки данных обратно запрашивающему клиенту без его буферизации.

Но клиент, как я могу обработать ответ ajax до его завершения? Возможно ли это?

Мне интересно, может ли быть полезен также тип данных MIME с несколькими типами ...?

+1

Как насчет того, чтобы разбить их на отдельные запросы? – epascarello

+0

Сначала я работал так, но был обеспокоен влиянием браузера и сервера. После одного вызова вместо 5 скажите 5 аякс, ожидающих в браузере. А также, говоря 5 запросов на пользователя на сервере, а не на одном. Я думаю, что браузеры имеют ограничение на максимальное количество одновременных запросов ajax, но я могу ошибаться. –

+1

Это не предел для запросов Ajax, это ограничение на количество http-соединений. Да, есть предел, но вы не можете его разбить, поэтому процесс, который занимает много времени, находится в его собственном запросе? Вы также можете изменить его на тип опроса интерфейса. Сделайте запрос и верните то, что у вас есть в это время. В новых браузерах также есть WebSockets. – epascarello

ответ

0

Сделайте отдельный контроллер/функцию (в зависимости от того, какой бэкэнд вы используете), а затем создайте отдельные запросы в своем javascript. Поскольку Javascript асинхронен, результаты будут отображаться на вашей странице по мере завершения каждой функции.

.NET псевдокод

public string Foo() { 
    string returnedJson = getFoo(); 
    return returnedJson; 
} 
//Same thing for Bar and Bah 

Тогда в вашем Javascript (если вы используете JQuery)

function onFooComplete() { 
    //In this function, display the data you get back from the server 
} 

$.get('/foo', function(res) { 
    onFooComplete(res); 
}); 

Для более надежной имплантации, посмотрите в использование публикации/подписки методологии в вашем JavaScript. https://github.com/cowboy/jquery-tiny-pubsub - очень маленькая, но полезная реализация pub/sub для jquery.

+0

Да, это в значительной степени то, что у меня есть на данный момент, но с использованием методов jquery .done и .fail для переноса нескольких вызовов. Я надеялся объединить их в один запрос. –

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