0

次の ajax 呼び出しがあります。

var blind = Ext.create('MyApp.view.blind.Progress', {});
         blind.show();
         Ext.Ajax.request({
            url: config.url,
            params: {
               nodeId: config.data[0].value,
               fileName: config.data[1].value,
               startDateTime: config.data[2].value,
               endDateTime: config.data[3].value,
               reportFormat: config.data[4].value
            },
            success: function (response) {
               console.log(response);
               blind.close();
            }
         });

ロード中のグラフィックでブラインドを表示し、完了したら閉じたいです。この ajax コールバックを使用して、応答からファイルをダウンロードする方法はありますか? 私は正しい軌道に乗っていますか?できれば iframe を使用したり、新しいタブを開いたりすることは避けたいと考えています。簡単であれば、jquery などの他のライブラリを使用することにもオープンです。

4

2 に答える 2

0

ajax リクエストにファイルで応答できるとは思わないでください。簡単なフォーム送信でうまくいくはずです。

于 2013-02-21T21:49:30.930 に答える
0

できないことを言われるのは好きではないので、調査を続け、この jquery プラグインを見つけました。これは、ファイルの配信時にサーバーによって作成された Cookie をポーリングし、ファイルをダウンロードするための一般的な iframe メソッドによって機能します。膨張もフラッシュもありません。まさに私が探していたものです。

Jquery ファイルのダウンロード

プラグインをダウンロードし、サイト内のどこかにリンクして、この Cookie 生成コードをファイル要求が送信される場所に追加します (リンクにはさらに例があります。私は ASP.NET を使用しています)。

HttpContext.Current.Response.SetCookie(new HttpCookie("fileDownload", "true") { Path = "/" });

プラグインの成功と失敗のコールバックを使用して、extjs ブラインドを制御する、アプリのサンプル コード:

$.fileDownload(config.url, {
     successCallback: function (url) {
        //Show a message here or perform some task
        blind.close();
     },
     failCallback: function (html, url) {
        blind.close();
        alert("The report generation failed.");
     },
     httpMethod: "POST",
     data: {
        nodeId: config.data[0].value,
        fileName: config.data[1].value,
        startDateTime: config.data[2].value,
        endDateTime: config.data[3].value,
        reportFormat: config.data[4].value
     }
  });
于 2013-02-22T17:31:22.910 に答える