在EXT.JS盲注中使用AJAX下载文件

时间:2013-02-21 20:54:14

标签: javascript jquery extjs

我收到了以下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这样的其他库。

2 个答案:

答案 0 :(得分:0)

不要认为可以用ajax请求回复文件。一个简单的表单提交应该可以解决问题。

答案 1 :(得分:0)

好吧,我不喜欢被告知我不能做什么,所以我一直在研究并找到了这个jquery插件。它的工作原理是在文件传递时轮询服务器生成的cookie,以及下载文件的典型iframe方法。没有膨胀,没有闪光,正是我所寻找的:

Jquery File Download

下载插件,将其链接到您站点的某个位置,并将此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
     }
  });