代码之家  ›  专栏  ›  技术社区  ›  resopollution

jsonpcomet挂起请求导致浏览器上的“加载”状态不好

  •  2
  • resopollution  · 技术社区  · 14 年前

    我使用jsonp来执行跨域comet请求,“加载”状态真的很烦人。

    有没有办法用javascript抑制这种情况?

    对于那些不熟悉jsonp的人来说,它基本上注入了一个脚本标记,除了在我的例子中,我在服务器上挂起请求,直到稍后才返回请求。

    在此期间,浏览器将我的请求视为“加载”状态。

    我用这个: http://code.google.com/p/jquery-jsonp/

    2 回复  |  直到 14 年前
        1
  •  1
  •   ssokolow    13 年前

    据我所知,使用Javascript无法抑制加载状态,无论您为什么使用它。

    然而,对于跨域COMET,至少有一种选择,它不会首先触发加载状态。XMLHttpRequest没有设置加载状态,根据我的测试,允许跨域XHR的CORS(Cross-Origin Resource Sharing)规范得到了很好的支持。

    基本上,支持是这样的:(根据浏览器文档和我自己对一个项目的测试)

    未经测试,但应得到充分支持:

    有限支持:

    明显不支持:

    • Opera(截至1190年1月11日,无任何支持)
    • Camino(从2.0.5开始,仍然基于Gecko 1.9.0(Firefox 3.0))
    • Arora (从0.10.2开始,继承WebKit的CORS API,但有一个导致请求失败的bug)
    • 古老的、基于Mozilla的Flock(基于Gecko 1.9.0(Firefox 3.0))

    这不是一个完整的列表,但它是每一个支持userscript的浏览器,我可以找到测试。我已经花时间在网上引用了我的消息来源 CORS wikipedia page

    我能想到的最简单的解决办法就是 test for CORS 然后回到JSONP,这样使用现代浏览器的人就可以获得完美的体验,而使用旧浏览器的人则会将加载状态视为不可避免的副作用。

    这是MDC的网页 how CORS works

        2
  •  2
  •   Casey Chu    14 年前

    如果你 你的第一个请求 之后 页面已完成加载,您应该能够避免加载指示器。

    $(function () {
        setTimeout(function () {
            $.jsonp(...)
        }, 1000);
    });