次の 2 つのことを行う[ドキュメントのダウンロード]ボタンがあります。
- ajax 呼び出しを行い、テーブルにデータを入力します。
Post
次のフォームを送信します。を。ドキュメントを作成するバックエンド スクリプトを実行します
b. ブラウザーがドキュメントをダウンロードする方法で、ブラウザーにドキュメントを返します。
一つの問題。送信は ajax ではありません。post
つまり、ブラウザーは、リンクをクリックしたり、ページを更新したり、ウィンドウを閉じたりするのと同じように処理します。たとえば、応答エラーを取得することなく ajax 要求をキャンセルします。
ボタンでの使用.preventDefault()
は機能しません。ajax 呼び出し ( 1 ) は正常に完了しますが、フォームは送信されないため、( 2 ) フォームは送信されません。
<form action="/backendScript" method="post">
<input type="submit" value="Download Document">
</form>
$(".downloadBtn").on("click", function (e) {
generateTable();
e.preventDefault(); // without this, the ajax in generateTable(); is cancelled, but with it, the form isn't submitted.
});
( 2 ) を ajaxpost
で実行しても機能しません。完了することはできますが ( 2.a )、返されたドキュメントはブラウザではなく Javascript に直接送られ、Javascript はダウンロード イベントを発生させることができないため、( 2.b ) このアプローチでは失敗します。
$.post("/backendScript", formData, function (generatedDoc) {
console.log(generatedDoc); //yay, here's our doc! but how do we download it??
});
そのため、フォームを送信する必要があるようです。 post
しかし、進行中の ajax リクエストがキャンセルされないようにするにはどうすればよいでしょうか?