Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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
HTTP:没有JavaScript的网页轮询?_Javascript_Html_Page Refresh - Fatal编程技术网

HTTP:没有JavaScript的网页轮询?

HTTP:没有JavaScript的网页轮询?,javascript,html,page-refresh,Javascript,Html,Page Refresh,我有一个web服务,任何用户都可以启动一个过程,完成这个过程大约需要15秒到10分钟。流程通过POST请求启动,用户被重定向到显示流程当前进度的页面(例如https://example.com/progress-status/123) 我当前的实现是用值n发送HTTP头Refresh;网址=https://example.com/progress-status/123其中n根据预期完成时间和当前服务器负载在5到120之间自动更改。因此,进度状态每5秒或更长时间自动更新一次。进度完成后,状态页面将

我有一个web服务,任何用户都可以启动一个过程,完成这个过程大约需要15秒到10分钟。流程通过POST请求启动,用户被重定向到显示流程当前进度的页面(例如
https://example.com/progress-status/123

我当前的实现是用值
n发送HTTP头
Refresh
;网址=https://example.com/progress-status/123
其中
n
根据预期完成时间和当前服务器负载在5到120之间自动更改。因此,进度状态每5秒或更长时间自动更新一次。进度完成后,状态页面将立即重定向(HTTP 301和
位置
标题)到已完成的作业

在Opera 42.0中,这在其他方面工作得很好,但会导致丑陋的闪烁,它认为这意味着强制重新加载并跳过所有缓存。我正在发送正确的
缓存控制
头,因此对所有内容使用缓存结果都可以,但是
刷新
头会导致忽略所有缓存。(状态页面包含一些图像和指向静态CSS文件的链接,因此对于每个轮询请求刷新这些资源没有任何意义。)

有没有办法在没有JavaScript的情况下只轮询HTML页面?我知道我可以使用Ajax查询只轮询当前状态,然后用更新的信息更新当前可见页面的部分。然而,如果用户禁用JavaScript,这将不起作用。服务的其余部分在没有JavaScript的情况下工作,因此需要JavaScript来完成这种简单的任务似乎很糟糕。(我在“进度状态”页面上已经有了一个“获取提交”按钮,可以强制手动刷新。)


我知道HTTP
Refresh
头在HTTP 1.0或HTTP 1.1中没有定义,所以这是一个有点灰色的区域。我正在寻找一种在现实世界中不使用JavaScript就可以工作的东西。

我想不出任何方法来做到这一点。更不用说需要良好实践:使用Javascript。

您可以使用
noscript
标记通知用户JavaScript是必需的:

<noscript>
    <h1>JavaScript is not enabled, please check your browser settings.</h1>
</noscript>

JavaScript未启用,请检查您的浏览器设置。
实际上,现在几乎每个人都启用了Javascript

在没有JavaScript的情况下使用谷歌地图、FaceBook等编号

为什么您的web应用程序需要这样做


我完全同意以下说法:

我认为牺牲99%的用户的功能来容纳1%的用户纯粹是出于血腥的思想


不是完全没有,但你不必重新加载整个页面。相反,您可以只听SSE(服务器端事件)并更新页面(包含它的元素)上的状态值。

您可以尝试html元刷新

<meta http-equiv="refresh" content="5"><!-- reloads the page after 5 seconds //-->


当然,只有在进度<100%的情况下才会这样说:)

HTTP协议在设计上是无状态的。因此,如果您不能使用javascript来实现这一点,那么我担心您将不得不接受它,因为该协议没有为您提供任何东西。此外,我认为如果禁用javascript,用户体验会下降是完全正常的。我强调的是degrade一词,它不同于break一词。opera在头中的
元素与头中的
元素表现出相同的行为吗赤裸裸的页面总是可以通过IFRAME交付的。是否可以在不使用JavaScript的情况下侦听SSE(服务器端事件)?怎么做?如果你仔细阅读我的答案,你会看到我的前三个词“不完全没有”。投反对票,因为这并没有回答问题。你对使用上下文的假设与被问到的不同。@FlorianLedermann我不同意否决票,因为我相信我确实回应了用户;这样做是不可能的。我的补充意见是我提出的建议。然而,每个人都有自己的观点,是值得尊敬的。