Индикатор загрузки с помощью Google Chrome - PullRequest
6 голосов
/ 26 июля 2010

У меня проблема с браузером Google Chrome или, скорее, с Android (2.1).

Мое веб-приложение вызывает restservices с каждой сменой страницы.Это занимает некоторое время, и мне нужна обратная связь для пользователя, например, всплывающее окно с надписью «работает ...».Остальные службы вызываются с помощью запроса синхронизации 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!Но когда я захожу в свое веб-приложение на Chrome oder с моего устройства Android, индикатор загрузки не появляется!Кажется, что браузер Google не работает с синхронными запросами.

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

Ответы [ 2 ]

8 голосов
/ 26 июля 2010

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

3 голосов
/ 26 июля 2010

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

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

Краткое описание поддержки JavaScript / jQuery в мобильных браузерах см. В этом посте групп Google: http://groups.google.com/group/jquery-dev/msg/262fa7d9f3cbe96e

Edit: Хотя пользовательский интерфейс Chrome блокируется, когда вы выполняете синхронный запрос, я смог обойти это, просто поместив небольшую задержку между показом индикатора загрузки и выполнением 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, чтобы браузер не кэшировал ответ, но он должен одинаково хорошо работать с запросами get. У меня нет телефона Android для тестирования, но он отлично работает в Google Chrome.

...