如何获取iframe响应http代码onload?

时间:2013-05-28 08:09:49

标签: jquery http iframe http-headers onload

我正在开发一个支持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无法读取响应头。这种情况类似于加载页面。如果我错了,请纠正我。

2 个答案:

答案 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页。