我正在开发一个支持Ajax的页面,我需要在不刷新页面的情况下下载文件。为此,我在页面上添加了一个隐藏的iframe。
<iframe id="iframeDownload" style="display:none"></iframe>
当我需要下载文件时,我使用这样的脚本:
$("#iframeDownload").attr("src","url to server");
在服务器端,我需要实现一些逻辑,它可能会返回一些不同的http状态代码来指示服务器端的问题。如果文件下载成功,那就没关系。但是如果服务器端出现问题,我需要抓住这些http代码。
$("#iframeDownload").load(function(e){
// get http status code and act accordingly but I cannot get it
});
感谢您的回复。
更新 在我看来,当我们通过iframe下载时,浏览器将处理发送请求和接收响应,并仅将响应主体传递给iframe。因此,javascript无法读取响应头。这种情况类似于加载页面。如果我错了,请纠正我。
答案 0 :(得分:1)
忘记HTTP状态。 Onload 事件不会返回任何内容:
document.getElementById("iframeDownload").onload = function(e){console.dir(e);)};
您可以在iframe响应中嵌入javascript:
<html>
<head>
<script>window.parent.loadSucceded()</script>
</head>
<body></body>
</html>
这将在您的主页上调用 loadSucceded 函数,从而为您的应用程序提供有关成功下载的通知。
答案 1 :(得分:0)
我最近经历过这个,我找到了一种处理加载错误的方法。
我已经更改了默认的Apache错误页面,插入了一些像JS parent.downloaderror_handler('put what you want');
这样的代码。
我没有对它进行测试,但是如果您在某些环境中,也许只有在$_SERVER['HTTP_REFERER']
测试时才发送JS。
请参阅此stackexchange topic以创建您自己的500页。