Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使Socket.IO显示浏览器';s页面加载指示器(旋转轮)_Javascript_Jquery_Node.js_Browser_Socket.io - Fatal编程技术网

Javascript 使Socket.IO显示浏览器';s页面加载指示器(旋转轮)

Javascript 使Socket.IO显示浏览器';s页面加载指示器(旋转轮),javascript,jquery,node.js,browser,socket.io,Javascript,Jquery,Node.js,Browser,Socket.io,我正在Node.js中构建一个web应用程序,并使用Socket.IO处理客户端和服务器端之间的数据传输 我的web应用程序的核心部分是内容提要。我的客户端Javascript对新闻提要的内容发出Socket.IO调用。一旦响应从服务器返回,它将使用JQuery填充网页上的提要 我的问题是Socket.IO不会导致浏览器的页面加载指示器(对于Chrome来说,这是网页选项卡中的旋转轮)显示。我想让它表现出来。如果没有这个加载指示器,我的网页看起来好像已经完成加载,而实际上还没有(提要还没有填充)

我正在Node.js中构建一个web应用程序,并使用Socket.IO处理客户端和服务器端之间的数据传输

我的web应用程序的核心部分是内容提要。我的客户端Javascript对新闻提要的内容发出Socket.IO调用。一旦响应从服务器返回,它将使用JQuery填充网页上的提要

我的问题是Socket.IO不会导致浏览器的页面加载指示器(对于Chrome来说,这是网页选项卡中的旋转轮)显示。我想让它表现出来。如果没有这个加载指示器,我的网页看起来好像已经完成加载,而实际上还没有(提要还没有填充)


这个问题的正确解决方案是什么?提前谢谢你

就其本身而言,没有正确的答案:浏览器供应商有不同的理由解释为什么某些活动会和不会显示“加载”状态:

一般来说,ajax类请求(与实际的完整页面加载异步的事情)在默认情况下可能不显示加载指示器,因为忙状态向用户指示浏览器慢/忙,并且我们对各种后台任务都使用ajax请求。当然,有时开发人员希望显示这些指标(表单提交、通过ajax下载后续页面的单页应用程序:我们希望向用户传达正在发生的重大事件以及他们应该等待事件完成的时间)但对于异步请求,我们无法控制强制执行。在某些浏览器上“伪造”它的唯一真正方法是在iframe中加载内容:在这种情况下,某些现代浏览器确实会触发“忙”状态

对于WebSocket,大多数供应商可能已经相当合理地应用了与ajax请求相同的逻辑:有许多您希望对WebSocket执行的操作可以在用户不直接启动它们的情况下执行,因此它们不应该触发“浏览器非常忙,请稍候”的感觉。而且,与ajax一样,遗憾的是,我所知道的api中没有一个可以反驳这种设计决策的api

iframe解决方案是有限的:它可以在某些浏览器中工作,但不是在所有浏览器中都可以(值得注意的是,它在所有主要的移动浏览器中都被忽略)。而粗制滥造(即,当你想让它触发负载指示器时,创建一个隐藏的iframe,当你想取消它们时,删除它)是有代价的:你基本上需要点击一个设计为“暂停”的资源(比如一个只运行sleep(10000)并保持连接打开的php页面)。这既很重要(额外的http请求只是为了触发一种效果),也让一些服务器无法保持基本上什么都不做的开放连接。这可能无法扩展,特别是如果该服务器与托管您的应用程序的服务器相同的话


相反,您可能需要编写自定义加载指示器(微调器,屏幕顶部固定的假进度条)。这并不令人满意,但它是唯一能保证向用户传达一些您想要的信息的东西。我有一个jQuery的ajax解决方案,它利用iframe方法(),您可以将其复制为socket.io的插件,但如果您使用的是websockets,这基本上意味着返回ajax风格的请求通信。你在狩猎、移动和更新的游戏中仍然运气不佳

你能为socket.io提供你的客户端代码吗?只是这个:socket.emit(“getRequests”,this.info);。就这样。我的问题不是套接字代码不起作用。在前端等待响应时,浏览器的页面加载指示器(旋转轮)不会出现。正确的解决方案是使用自定义旋转轮。例如,在页面上放置一个动画gif,并在执行
操作时显示它。发出
并在接收数据时隐藏它。这就是FaceBook的工作原理。当你点击一个菜单项时,旁边会出现一个小旋转轮。@freakish说得对,或者你可以参考这个问题:[链接]),通过使用iframe你可以模拟加载感谢你的回复!是的,我考虑过把定制的纺车-它只是觉得有点不舒服。难道真的没有另一种标准解决方案吗?我想这对很多Socket.IO开发人员来说一定是个问题。。。