私は非常に ajax を多用した Web サイトを持っています。基本的には SPA ですが、すべてのガイドラインに従っているわけではないため、ラベルを付けることはしません。
ページの div にあるストアがあり、jquery ajax とノックアウトを介して更新されます。最後に必要なものの 1 つは、サード パーティの Web サービスから PDF をダウンロードする機能です。以下を使用してpdfをダウンロードできます
<form action="/Dashboard/DownloadPdf" method="POST" style="display:none;" id="ProductDownload" data-bind="with: ProductToDownload">
<input type="hidden" id="Name" name="Name" data-bind="value: Name"/>
<input type="hidden" id="FileName" name="FileName" data-bind="value: FileName"/>
<input type="hidden" id="Id" name="Id" data-bind="value: Id"/>
<input type="hidden" id="Date" name="Date" data-bind="value: Date"/>
<input type="hidden" id="Number" name="Number" data-bind="value: Number"/>
</form>
そして、ノックアウトを使用して、フォームを送信する前に ProductToDownload を設定します。
$('フォーム').submit();
私ができるようにしたいのは、フォームがフェッチされている間にローダーをスローするなど、アクションが実行されて終了したことをユーザーに示すことです。
私の問題は、 form.submit() がいつ終了したかを知る能力にあります。
ローダーなどをクリーンアップできるように、フォームの送信がいつ終了したかを知るにはどうすればよいですか。
また、以下はpdfをプルダウンするために使用するコードです。誰かが私が正しく行っていることを確認していただければ幸いです。
[HttpPost]
public void DownloadPdf(Product product)
{
var asr = Services.GetProduct(Token, product);
Response.ClearHeaders();
Response.ClearContent();
Response.AppendHeader("Content-Disposition","attachment; filename=" + product.FileName);
Response.ContentType = "application/pdf";
Response.BinaryWrite(asr.Payload.Pdf);
Response.End();
}
PDF をローカルに保存するのではなく、別のサービスからリクエストすることに注意してください。