6

我对 Google Chrome 或更确切地说是 Androids (2.1) 网络浏览器有疑问。

我的 web 应用程序在每次页面切换时调用 restservices。这需要一些时间,我需要为用户提供反馈,例如“正在工作...”弹出窗口。使用同步 ajax 请求调用 restservices。这是一个例子:

$.ajax({
    url:一些URI,
    异步:假,
    发送前:函数(){
        showIndicatorDialog();
    },
    完成:函数(){
        hideIndicatorDialog();
    },
    成功:功能(响应){
        成功后做某事;
    },
    错误:函数(响应){
        出错后做某事;
    },
    类型:'获取'
});

这在 FF 和 Opera 上效果很好!但是,当我使用我的 Android 设备在 Chrome oder 上访问我的 web 应用程序时,加载指示器不会出现!谷歌浏览器似乎不适用于同步请求。

有人知道我怎样才能让它工作或知道另一种解决方案来获得 chrome 中的加载指示器吗?

4

2 回答 2

8

解决方案是不使用同步请求。一般来说,永远不应该使用同步请求,因为它们往往会阻止页面上其他任何内容(甚至整个浏览器 UI)的执行,这是不好的。

于 2010-07-26T15:10:30.150 回答
3

您是说加载指示器也没有显示在 Google Chrome(桌面)上,还是仅适用于 Android 设备的移动 Google Chrome Lite 浏览器?如果您使用的是最新版本的 jQuery,那么它应该可以在所有桌面浏览器上运行。由于界面设计截然不同,移动浏览器没有得到很好的支持,而且由于不是完整的浏览器,许多浏览器没有完全功能的 JS 支持。

也就是说,我还没有听说 Chrome Lite 中的 jQuery 有任何问题——Android 平台最令人印象深刻的事情之一就是在移动平台上包含了一个功能齐全的浏览器。但我认为有一个移动版本的 jQuery 可用或正在开发中。所以如果一切都失败了,你可以试试。

有关移动浏览器上 JavaScript/jQuery 支持的概要,请参阅此 Google 群组帖子: http ://groups.google.com/group/jquery-dev/msg/262fa7d9f3cbe96e

编辑: 虽然 Chrome 的 UI 在您执行同步请求时似乎确实锁定了,但我可以通过在显示加载指示器和执行 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 请求。我没有安卓手机来测试它,但它在谷歌浏览器中运行良好。

于 2010-07-26T15:20:03.457 回答