在Ajax中调用控制器以Grails

时间:2018-04-13 15:31:00

标签: ajax grails groovy download controller

我是Grails的新手,我在下载控制器中生成的文档时遇到了麻烦。

我的jQuery

$("#exportAllSelectedData").click(function() {
   var dataToExport = $("#dataToExport").val();
   jQuery.ajax(
       {type:'POST',
        data:'dataToExport=' + dataToExport ,
        dataType: 'json',
        url:'/myapp/mycontroller/exportPreferences'});;
});

我的控制器

def exportPreferences ()
{
    File file = File.createTempFile("export",".xml");
    String dataToWrite = params.dataToExport;
    file.write(dataToWrite);
    response.contentType = "application/octet-stream";
    response.setHeader "Content-disposition", "attachment; filename=${file.name}";
    response.outputStream << file.bytes;
    response.outputStream.flush();
}

我原本希望用浏览器下载outputStream,但什么都没发生。 我做错了什么?

编辑: 谢谢Rahul。 它运行良好:

$("#exportAllSelectedData").click(function() {
  var dataToExport = $("#dataToExport").val();
  window.location="<g:createLink controller="mycontroller" 
  action="exportPreferences"/>"+"?dataToExport="+dataToExport
});

1 个答案:

答案 0 :(得分:0)

您不需要Ajax下载文件。

您只需使用window.location下载文件即可。

示例:

$("#exportAllSelectedData").click(function() {
    window.location="<g:createLink controller="mycontroller" action="exportPreferences" />"
});


如果您尝试使用Ajax,您将获得(渲染)文件文本

示例:

$("#exportAllSelectedData").click(function() {
        $.ajax({
            type: "GET",
            url: "<g:createLink controller="demo" action="exportPreferences" />",
            success: function (data) {
                console.log(data);               
            }
        });
    });

希望这会对你有所帮助。