是否可以取消表单提交后发出的(POST)请求?
我正在将来自数据库的大量数据直接传输到客户端进行下载(即Content-Disposition: attachment;
)。为了做到这一点,我创建了一个临时表单并提交它(这样我就可以在正文中发送请求参数,并且仍然让浏览器将响应下载为文件)。
var form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', '/query/stream');
var paramElement = document.createElement('input');
paramElement.setAttribute('type', 'hidden');
paramElement.setAttribute('name', 'jsonParams');
paramElement.setAttribute('value', JSON.stringify(reqParams));
form.appendChild(paramElement);
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
但是,在提交下载开始后(数据检索数据时)可能需要一到一分钟。我希望用户能够在提交后取消请求。这可能吗?
如果它有用,客户端是AngularJS,服务器端是Node.js.
* 我正在播放,因为在服务器上创建临时文件非常重要,我无法通过非流式响应发送数据,因为数据太大而无法保留服务器内存。
我无法使用AJAX,因为我直接进行文件下载。在触发任何load
事件之前,AJAX调用将要求将数据完全下载(到内存中)。这会导致客户端出现内存问题。