抓住太长时间的表单提交

kse*_*een 17 html javascript forms asp.net asp.net-mvc

我正在开发一个HTML页面,它具有按钮提交的简单HTML表单(没什么特别的).提交表单和响应时间过长(如果真的回来的话)有几种情况.如何在等待响应时间过长时,如何组织表单?我们可以向用户显示一些通知,表明我们的服务器在那种情况下过载.

这是通过表单发送的请求:

POST http://example.com/search HTTP/1.1
Host: example.com
Proxy-Connection: keep-alive
Content-Length: 83
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://example.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://example.com/
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: [cookie definition omitted]

[form data omitted]
Run Code Online (Sandbox Code Playgroud)

Proxy-Connection: keep-alive影响莫名其妙的过程?谷歌搜索引导我到https://github.com/caxap/jquery-safeform插件,但它有一点不同的目的.

Chr*_*att 13

这取决于您要向用户呈现的UI类型.您可以简单地降低服务器级别的超时,如果无法及时完成响应,它将中止.但是,用户体验非常苛刻,因为他们只会得到一个通用的超时错误,甚至可能不会来自您的网站.(他们必须点击返回或某些东西才能返回您的网站.)

如果您只想在经过一段时间后显示消息,则可以附加到表单的提交事件并用于setTimeout显示警报或其他内容:

$('#MyForm').on('submit', function () {
    setTimeout(30000, function () { // number is milliseconds
        alert('Sorry this is taking so long.');
    });
});
Run Code Online (Sandbox Code Playgroud)

最后,如果有一些跟踪服务器端正在完成的操作进度的方法,您可以使用Web套接字或通过AJAX进行长轮询来提供某种进度条或状态更新.但这有点复杂,需要你做一些研究.