jsonp彗星悬挂请求会在浏览器上导致丑陋的“加载”状态
我正在使用jsonp来做跨域彗星请求,而“加载”状态真的很烦人。
有没有办法用javascript来抑制这个?
对于那些不熟悉jsonp的人来说,它基本上会注入一个脚本标记,除了在我的情况下,我将请求挂在我的服务器上,直到稍后才返回请求。
在此期间,浏览器将我的请求视为“加载”状态。
我正在使用此: http : //code.google.com/p/jquery-jsonp/
提前致谢!
据我所知,无论你为何拥有它,都无法使用Javascript来抑制加载状态。
但是,跨域COMET至少有一种替代方案,它不会首先触发加载状态。 XMLHttpRequest不设置加载状态,并且根据我的测试,支持跨域XHR的CORS(跨源资源共享)规范得到了很好的支持。
基本上,支持如下:(根据我正在研究的项目的浏览器文档和我自己的测试的混合)
全力支持:
- Gecko 1.9.1+(Firefox 3.5,SeaMonkey 2.0等测试好的Firefox 3.6.8和SeaMonkey 2.0.7)
- WebKit(Safari 4 +,Chrome 3+等等。测试在OSX上的Safari 4,WinXP上的Safari 5,Chrome 5.0.375.127(稳定频道), Midori 0.2.7,新的Flock , Epiphany 2.30.2, luakit和uzbl )
未经测试,但应完全支持:
- Fluid (基于WebKit的MacOS替代Mozilla Prism和Chrome的“创建应用程序快捷方式……”)
有限的支持:
- Internet Explorer 8(Microsoft实现了一个XDomainRequest()对象,并以安全性为借口,没有实现该标志以通过请求传递凭据和cookie)
- Sleipnir (支持取决于它嵌入的MSHTML版本)
显然不受支持:
- Opera(截至11月11日,没有任何支持)
- Camino(截至2.0.5,仍然基于Gecko 1.9.0(Firefox 3.0))
- Arora (截至0.10.2,inheritance了WebKit的CORS API,但有一个导致请求失败的错误)
- 旧的,基于Mozilla的Flock(基于Gecko 1.9.0(Firefox 3.0))
它不是一个完整的列表,但它是每个浏览器都有用户脚本支持我可以找到测试。 如果你需要,我已经花时间在CORS维基百科页面上引用我的资料。
我能想到的最简单的解决方案是测试CORS ,然后再回到JSONP,以便使用现代浏览器的人获得完美体验,使用旧版本的人看到加载状态是不可避免的副作用。
这是关于CORS如何工作的MDC页面。
如果您在页面加载完成后 开始第一个请求,则应该可以避免加载指示符。
$(function () { setTimeout(function () { $.jsonp(...) }, 1000); });