Должен ли я просто позволить пользователю повесить? - PullRequest
0 голосов
/ 13 ноября 2009

Я не совсем уверен, что делать в этой ситуации. У меня есть несколько вкладок JQuery UI 1,7, которые включены AJAX. Теперь, когда вкладка нажата, она переходит к моему методу действия контроллера mpc asp.net. Затем он делает все необходимое и возвращает частичное представление.

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

Мой сайт будет загружать вкладку очень быстро X раз, затем внезапно запрос просто зависнет и, может быть, через 15 секунд он загрузится. Или, если вы просто обновите страницу, она вернется и снова начнет их загружать очень быстро.

Проблема, однако, заключается в том, что запрос отправляется на сервер, на котором он висит. Поэтому я попытался установить тайм-аут jquery для всех моих файлов ajax, и это вызывает прерывание на вкладках пользовательского интерфейса jquery.

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

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

Так что, если он зависает и не завершает работу, он действительно портит вкладки ajax. Понятия не имею, как это исправить.

Так что я не уверен, что делать.

Позвольте им зависать, сколько бы времени ни понадобилось серверу, чтобы выяснить, как завершить этот запрос (когда сделан запрос ajax, я отключаю все вкладки. Это потому, что, если кто-то скажет, загрузил вкладку и не дал ей завершиться и попытался перейти на другую вкладку, такая же проблема возникнет с объединением вкладок). Или отмените запрос и закрутите вкладки.

Прекрасный выбор, который у меня есть. У кого-нибудь есть лучший выбор?

Спасибо

Ответы [ 4 ]

1 голос
/ 13 ноября 2009

У нас похожая ситуация: первый человек, который посетит сайт в течение дня, будет иметь 15-секундную задержку, пока все загружено.

В нашей ситуации при всех вызовах на сервер через jQuery я установил обычное время ожидания JavaScript на 2 секунды. Через 2 секунды я выскакиваю небольшой div, говоря, что что-то говорит дольше, чем ожидалось, и, пожалуйста, наберитесь терпения.

спустя еще 6 секунд я закрываю этот div и открываю новый с большим количеством извинений.

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

тепло и нечетко, как мы их здесь называем. :)

1 голос
/ 13 ноября 2009

Я не уверен, что вы подразумеваете под "jquery timeout". если вы имеете в виду setTimeout, это определенно не будет работать. Если вы имеете в виду, с другой стороны,

$.ajax({
     url:"myserverprocess", 
     timeout: 200, 
     error: function () { /* try again */ }, 
     success: function (myadata) { alert("mydata")}
});

тогда должно работать. Попробуйте опцию тайм-аута, если вы еще этого не сделали.

редактирование: Вы можете попробовать:

$(selector).tabs({
    ajaxOptions: {
        url:"myserverprocess", 
        timeout: 200, 
        error: function () { /* try again */ }, 
        success: function (myadata) { alert("mydata")}
    }
});
0 голосов
/ 13 ноября 2009

Вы можете использовать Jquery, чтобы установить таймаут для вашего вызова ajax, а затем перехватить его в разделе ошибок. Попав в ловушку, вы можете попытаться повторить попытку или выполнить любую необходимую очистку.

0 голосов
/ 13 ноября 2009

У нас был хороший успех с использованием менеджера очередей jquery - http://www.protofunc.com/scripts/jquery/ajaxManager/

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

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