2010-12-11 2 views
2

Концептуально, мое понимание AJAX - это запросы, отправляемые на сервер асинхронно aka параллельно. Когда я использую несколько UpdatePanels на странице и запускаю несколько асинхронных обратных передач (например, используя кнопку), я замечаю, что второй запрос не запускается до завершения первого.ASP.NET AJAX с использованием UpdatePanels

Однако, когда я использую JQuery ajax и использую PageMethods/WebMethods, мои запросы обрабатываются параллельно.

Почему существует несоответствие в способе поведения ASP.NET AJAX?

Кроме того, при нажатии на кнопку в UpdatePanel несколько раз, он отменяет предыдущие запросы. Я ожидал, что они будут поставлены в очередь.

любая помощь?

+2

Запрос от UpdatePanel продолжается по всему жизненному циклу страницы. Следовательно, есть данные состояния, связанные с каждым запросом. Вот почему два запроса не могут выполняться одновременно для одного и того же сеанса. Где в качестве JQuery запросы ajax затрагивают статические методы без состояния. – 2010-12-13 01:54:44

ответ

2

Потому что это должно вести себя так.

Асинхронный обратный вызов UpdatePanel по-прежнему таков: postback. Если нескольким обратным вызовам было разрешено параллельно, их новые ViewStates часто не синхронизировались друг с другом. Затем, следующий постбэк вызовет ошибку проверки ViewState и/или одна из модификаций postbacks в состояние страницы будет потеряна после завершения третьей обратной передачи.

С другой стороны, метод страницы и вызовы веб-службы не обременены WebForms ViewState или жизненным циклом страницы. Таким образом, поскольку многие из них могут возникать параллельно, поскольку ограничение одновременного запроса браузера позволяет (обычно 4-8, но только 2 в некоторых браузерах, таких как IE6).

+2

+1 Это именно то, что я говорил в своем комментарии. Модель ASP.NET AJAX является принципиально сломанным дизайном. – 2010-12-13 02:02:05

2

This blog post похоже, что эта проблема решает проблему и предоставляет решение. Он использует некоторый javascript для очереди нескольких запросов и отправляет их на сервер в пакете (я думаю).

+0

Спасибо за ссылку. Это определенно касается моего вопроса о том, что запросы прерываются. Любые мысли по моему вопросу о несоответствии поведения ASP.NET AJAX? –