【发布时间】:2013-08-02 15:09:52
【问题描述】:
我有一个关于使用 POST 下载文件的问题。
我有以下 javascript 向服务器端发送 POST 请求以下载文件:
function postCall(url, params) {
function doPostCall() {
var newForm = jQuery('<form>', {
'method':'POST',
'action': url
});
for(key in params) {
if (params.hasOwnProperty(key)) {
newForm.append(jQuery('<input>', {
'name': key,
'value': params[key],
'type': 'hidden'
}));
}
}
newForm.appendTo("body").submit();
}
从 HTML 页面中的不可见 iframe 调用此方法。这个页面还有另一个普通的 GET 请求来获取静态 HTML。但是,每次调用上述方法时,获取静态页面的调用永远不会从服务器端返回。
我知道用这么少的信息有点难以理解,但是代码很大而且很难放在这里。我的问题是:
- 上面的代码使用不可见的表单发送POST请求来获取文件有什么明显的问题吗?
- 还有其他更好的方法可以向服务器发送 POST 请求以下载文件。 (有人说不能用Ajax调用来下载文件)?
- 如果此代码正常且没有其他方法可用。在整个页面加载完成并且所有其他请求都完成后,是否有强制此方法在最后一件事上运行?
【问题讨论】:
-
get 请求是否由于表单发布启动的页面重新加载而中止?通常,像这样的表单帖子具有指向特定 iframe 的 target 属性,导致 iframe 重新加载,而不是整个页面,这将允许您的 get 请求完成。
-
我不明白您为什么不能使用 AJAX 进行下载。为什么在获取某些东西时使用 POST?
-
@putvande 因为使用 ajax,您无法将内容作为文件发送到用户的计算机。
-
@KevinB 但您可以在下载该文件的文件的回调中执行 window.location.href。
-
"在整个页面加载完成并且所有其他请求都完成后,是否有强制此方法在最后一件事上运行?" -- 是的,
.ajaxComplete()
标签: javascript jquery html