Может ли кто-нибудь помочь мне с состоянием гонки AJAX, когда кнопки отключены? - PullRequest
0 голосов
/ 27 февраля 2009

У меня проблема с AJAX. На странице ASP.NET есть кнопка, которую, я думаю, можно отключить и снова включить при обратной передаче, что необходимо сделать по другим причинам. Внутри панели обновления есть 2 выпадающих меню, которые будут использовать AJAX. Первое выпадающее меню обновляет второе. В первом раскрывающемся списке есть клиентская сторона onblur, которая вызывает __doPostBack, и серверный вызов к обработчику событий onselectedindexchanged вызывается, если что-то изменилось в раскрывающемся списке. Проблема в том, что если клиентское событие onblur происходит слишком быстро, создается впечатление, что обратная передача происходит слишком быстро, а кнопки остаются отключенными.

Например, это происходит, если пользователь быстро перемещается по раскрывающемуся списку. Я читал, что это проблема AJAX, если ответ сервера немного медленный, а частичный рендеринг портит ситуацию.

У кого-нибудь есть решение для этого?

Ответы [ 3 ]

0 голосов
/ 27 февраля 2009

Трудно сказать без какого-либо кода для просмотра, но ... Помните, что означает первая буква AJAX: асинхронный. Вы не можете гарантировать, когда ваш метод обратного вызова действительно будет выполняться. Или, если вы сделаете два звонка (A, затем B), вы можете получить ответ A, затем B ... но в следующий раз это B, а A.

0 голосов
/ 27 февраля 2009

Возможно, вы могли бы использовать логическую переменную, которую вы помечаете во время ожидания завершения метода AJAX, и проверяете его перед тем, как запускать код в методе события onselectedindexchanged. Таким образом, метод события onselectedindexchanged ничего не сделает, если метод AJAX еще не завершен.

0 голосов
/ 27 февраля 2009

Общим решением может быть использование счетчика с контролем; уменьшать и отключать, только если <= 0, увеличивать и включать, если> 0. :) Операторы ++ / - не могут быть гарантированно атомарными, но они «достаточно хороши».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...