7

私は 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 は応答ヘッダーを読み取ることができません。このケースは、ページの読み込みに似ています。私が間違っている場合は、私を修正してください。

4

2 に答える 2

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関数が呼び出されるため、アプリケーションはダウンロードの成功について通知を受けます。

于 2015-06-26T17:30:52.193 に答える
0

私は最近これを経験しており、読み込みエラーを処理する方法を見つけました。JS のようなコードを挿入するために、デフォルトの Apache エラー ページを変更しましたparent.downloaderror_handler('put what you want');

$_SERVER['HTTP_REFERER']私はそれをテストしていませんが、何らかのコンテキストにいる場合にのみ、JS を送信することをテストできるかもしれません。

独自の 500 ページを作成するには、このstackexchange トピックを参照してください。

于 2014-03-25T15:48:53.563 に答える