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 回答