2010-07-26 3 views
6

У меня проблема с Google Chrome или, скорее, с андроидами (2.1) webbrowser.Индикатор загрузки с Google Chrome

My webapp обращается к сервисам с каждой сменой страницы. Это занимает некоторое время, и мне нужна обратная связь для пользователя, как небольшое «рабочее ...» всплывающее окно. Службы восстановления вызываются с помощью запроса ajax синхронизации. Вот пример:

 
$.ajax({ 
    url: some URI, 
    async: false, 
    beforeSend: function() { 
     showIndicatorDialog(); 
    }, 
    complete: function() { 
     hideIndicatorDialog(); 
    }, 
    success: function(response) { 
     do something after success; 
    }, 
    error: function(response) { 
     do something after error; 
    }, 
    type: 'GET' 
}); 

Это отлично работает на FF и Opera! Но когда я нахожусь в моем webapp на Chrome oder с моим Android-устройством, индикатор загрузки не появляется! Кажется, что браузер Google не работает с синхроническими запросами.

Кто-нибудь знает, как я могу заставить это работать или знает другое решение, чтобы получить индикатор загрузки в хроме?

ответ

8

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

+0

Мне очень хотелось бы услышать причину падения. –

+0

Хорошо, ваше право. Но это архитектура на данный момент, и я не могу ее изменить в ближайшем будущем. :/ – bedit

+0

Говорить, что синхронные запросы должны «никогда» не использоваться, является довольно смелым утверждением. Это требует гораздо лучшего объяснения, чем «они, как правило, блокируют вещи». Что они блокируют? Как пользователи будут добавлять в закладки свое местоположение, если все в вашем приложении является асинхронным? –

3

Вы говорите, что индикатор загрузки не отображается на Google Chrome (рабочий стол) или просто на мобильном браузере Google Chrome Lite для устройств Android? Если вы используете последнюю версию jQuery, она должна работать на всех настольных браузерах. Мобильные браузеры плохо поддерживаются из-за их сильно отличающегося дизайна интерфейса и, не будучи полнофункциональными браузерами, многие из них не имеют полностью функциональной поддержки JS.

Это говорит о том, что я не слышал о каких-либо проблемах с jQuery в Chrome Lite. — Одной из самых впечатляющих особенностей платформы Android является включение полнофункционального браузера на мобильную платформу. Но я думаю, что есть мобильная версия jQuery, доступная или работающая. Поэтому, если все остальное не удается, вы можете попробовать это.

Для изношенной поддержки JavaScript/JQuery на мобильных браузерах см это Google Groups поста: http://groups.google.com/group/jquery-dev/msg/262fa7d9f3cbe96e

Edit: Хотя интерфейс Хрома кажется запереть в то время как вы выполняете синхронный запрос, Я смог пройти это, просто поставив небольшую задержку между показом индикатора загрузки и выполнения XHR:

function callAjax() { 
    showIndicatorDialog(); 
    setTimeout("testAjax()",100); 
} 
function testAjax() { 
    foo = $.ajax({ 
     url: "index4.htm", 
     global: false, 
     type: "POST", 
     data: { 
      id: 3 
     }, 
     dataType: "html", 
     async:false, 
     success: function(msg){ 
      $('#response').text(msg); 
     }, 
     complete: hideIndicatorDialog 
    }).responseText; 
} 

Я использовал запрос POST, чтобы предотвратить браузер от кэширования ответа, б Это должно работать одинаково хорошо с запросами на получение. У меня нет Android-телефона для тестирования, но он отлично работает в Google Chrome.

+0

Да, индикатор не отображается на рабочем столе Google Chrome и на устройстве Android. Я использую версию 1.4.2 jQuery. Возможно, я играю с jQTouch ... – bedit

+0

@benjamin: Попробуйте помешать задержке между показом индикатора загрузки и запуском синхронного XHR. –

+0

Hi Lèse, он работает с таймаутом !! Спасибо за ваши большие усилия! Я не могу дать вам голосование, потому что сначала мне нужно 15 репутаций! :/ – bedit

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

  • Нет связанных вопросов^_^