Я пытаюсь использовать опрос AJAX с jQuery для обновления элемента span на бритве MasterPage в ASP.NET MVC3. На странице используется инфраструктура jQuery Mobile 1.0, которая украшает простые изменения представления (например, переход от / home к / about) с некоторой анимацией "перехода".
Это код Javascript, который выполняет опрос, в то время как диапазон «unreadBubble» находится в теле - оба они определены в MasterPage!
<script type="text/javascript">
$(document).bind("pageinit", function poll() {
setTimeout(function () {
$.ajax({ url: "/Notification/GetUnreadNotificationsCount",
dataType: "json",
success: function (data) {
$('#unreadBubble').text(data.UnreadCount);
poll();
}
});
}, 1000);
});
Итак, представьте, что у меня есть HomeController и NotificationController, которые используют MasterPage и предоставляют представление Index. Опрос AJAX работает с обоими представлениями и обновляет интервал каждую секунду, как и ожидалось. Как только я перехожу из одного представления в другое, диапазон переинициализируется со значением по умолчанию из MasterPage (пусто) и больше не обновляется. Интересно, что асинхронный метод GetUnreadNotificationsCount по-прежнему вызывается в NotificationsController неоднократно - диапазон просто не обновляется. Я также пытался предупредить тег span в JS, и он не был нулевым или что-то в этом роде.
Согласно документации , jQuery Mobile также загружает новые страницы с помощью AJAX для вставки этой причудливой анимации перехода «SWOOSH». Кажется, это как-то мешает инициализации JS / DOM.
У вас есть идеи, как решить эту проблему? Должен ли я связываться с другим событием или я могу как-то принудительно обновить тег span?
Решение : Это была проблема с кэшированием! Следующие сделали свое дело:
Добавьте class = "command-no-cache" к вашей странице div и добавьте следующий JavaScript-код в MasterPage:
$(":jqmData(role=page)").live('pagehide', function (event, ui) {
if ($(this).children("div[data-role*='content']").is(".command-no-cache"))
$(this).remove();
* * 1 022});