2010-07-26 25 views
6

Mam problem z przeglądarką Google Chrome lub raczej przeglądarką Androids (2.1).Wskaźnik ładowania z Google Chrome

Moja aplikacja do nawiązywania połączeń z serwisem WWW z każdym przesunięciem strony. Zajmuje to trochę czasu i potrzebuję informacji zwrotnej dla użytkownika, takich jak małe okienko "pracy ...". Restservices są wywoływane za pomocą żądania ajax sync. Oto przykład:

 
$.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' 
}); 

To działa świetnie na FF i Operze! Ale kiedy odwiedzam moją aplikację internetową na Chrome lub urządzeniu z Androidem, wskaźnik ładowania się nie pojawia! Wygląda na to, że przeglądarka Google nie działa z żądaniami synchronicznymi.

Czy ktoś wie, w jaki sposób mogę uzyskać to do pracy lub zna inne rozwiązanie, aby uzyskać wskaźnik ładowania w chrome?

Odpowiedz

8

Rozwiązaniem nie jest stosowanie żądań synchronicznych. Ogólnie rzecz biorąc, żądania synchroniczne powinny być używane jako nigdy, ponieważ mają tendencję do blokowania wykonywania czegokolwiek innego na stronie (lub nawet całego interfejsu przeglądarki), co nie jest dobre.

+0

Bardzo chciałbym usłyszeć powód do zgonu. –

+0

OK, twoje prawo. Ale to jest architektura w tej chwili i nie mogę jej zmienić w najbliższej przyszłości. :/ – bedit

+0

Twierdzenie, że żądania synchroniczne powinny "nigdy" nie zostać użyte, jest dość odważnym stwierdzeniem. Wymaga znacznie lepszego wyjaśnienia niż "mają tendencję do blokowania rzeczy". Co blokują? Jak użytkownicy dodaliby do zakładek swoją lokalizację, jeśli wszystko w Twojej aplikacji jest asynchroniczne? –

3

Czy mówisz, że wskaźnik ładowania nie pojawia się również w Google Chrome (na komputerze) lub po prostu mobilna przeglądarka Google Chrome Lite na urządzenia z Androidem? Jeśli używasz najnowszej wersji jQuery, powinna działać na wszystkich przeglądarkach komputerowych. Przeglądarki mobilne nie są dobrze obsługiwane ze względu na drastycznie odmienny wygląd interfejsu, a nie pełne przeglądarki, wiele z nich nie ma w pełni funkcjonalnej obsługi JS.

Powiedział, że nie słyszałem o żadnych problemach z jQuery w Chrome Lite — jedną z najbardziej imponujących rzeczy na temat platformy Android jest włączenie w pełni funkcjonalnej przeglądarki na platformę mobilną. Ale wydaje mi się, że dostępna jest mobilna wersja jQuery albo w pracy. Więc jeśli wszystko inne zawiedzie, możesz spróbować.

Do skręcania wsparcia JavaScript/jQuery na przeglądarkach mobilnych, zobacz ten post Grupy dyskusyjne: http://groups.google.com/group/jquery-dev/msg/262fa7d9f3cbe96e

Edit: Chociaż Chrome UI wydaje się zamknąć, gdy jesteś wykonywania synchronicznego żądania, udało mi się ominąć to po prostu oddanie niewielkie opóźnienie między pokazując wskaźnik ładowania i wykonywania 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; 
} 

użyłem żądanie POST, aby zapobiec przeglądarki z buforowanie odpowiedzi, b ut to powinno działać równie dobrze z żądaniami otrzymania. Nie mam telefonu z Androidem, by go przetestować, ale działa dobrze w Google Chrome.

+0

Tak, wskaźnik nie pojawia się na pulpicie Google Chrome i na urządzeniu z Androidem. Używam wersji 1.4.2 jQuery. Może gram z jQTouch ... – bedit

+0

@benjamin: Spróbuj wprowadzić opóźnienie między wyświetlaniem wskaźnika ładowania i uruchomieniem synchronicznego XHR. –

+0

Hi Lèse, działa z limitem czasu !! Dzięki za wspaniały wysiłek !! Nie mogę głosować, ponieważ potrzebuję 15 reputacji! :/ – bedit

Powiązane problemy