如何使用java脚本ajax调用下载txt文件

时间:2015-08-10 08:20:57

标签: javascript java jquery ajax rest

我想下载一个文本文件(例如:-somthing.txt)。当我使用ancor标签时,文件被下载,但我想使用ajax调用下载文件。

HTML code:

<body>
    <a href="#" id="exportViewRule">Export</a>
</body>

JavaScript代码:

$("#exportViewRule").click(function(){
            $.ajax({
                url : "/download/myDir/exportFile",
                type : "GET",
                contentType : "text/plain",             
                success : function(data){
                    alert(data);
                }

        });
    });

java代码:

@Path("/myDir")
public class IdnsDataHandler {

@GET
    @Path("/exportFile")
    @Produces("text/plain")
    public Response exportFile(){
        File file=new File("/home/cerdik/Desktop/some.text");
        ResponseBuilder response=Response.ok((Object)file);
        response.header("Content-Disposition","attachment; filename=export-file.text");
        return response.build();
    }
}

当我使用此代码(没有javascript)时,下载有效。

HTML code:

<body>
    <a href="./download/myDir/exportFile" id="exportViewRule">Export</a>
</body>

5 个答案:

答案 0 :(得分:1)

感谢所有人,我发现了这种下载方法的另一种解决方案,现在我没有使用ajax调用,下面显示了我的成功代码

HTML:

<a id="exportView" style="cursor:pointer">Export</a>

JavaScript的:

$("#exportView").click(function(){
            var exportId = $('#serviceRules option:selected').attr("stream");
            var TakeHref="./download/myDir/exportFile"+exportId;
            document.getElementById("exportView").setAttribute("href", TakeHref);
        });

此代码在我的应用中成功运行,谢谢大家。

答案 1 :(得分:0)

我认为您必须将文件结尾包含在网址中(例如.txt)

$.ajax({
   url : "/download/myDir/exportFile.txt",
   ...
})

答案 2 :(得分:0)

答案是:不,你不能

  

AJAX请求在浏览器中的呈现页面内完成。他们请求文件的内容并存储在XMLHTTPObject内。 content-type的响应标头不会产生影响,浏览器会忽略它。

更准确地说

AJAX调用在响应头设置为TEXT/HTML的页面内执行,这意味着AJAX请求该文件的内容。呼叫不会重置响应头,因此不会触发下载。

单击链接时,描述文件内容的响应标头将由JAVA代码发送到页面,从而导致响应被浏览器视为下载。

答案 3 :(得分:0)

你应该使用ajax调用,技巧是定义dataType 然后响应将是.txt文件包含的内容。

$.ajax({
        url : "some-file.txt",
        dataType: "text",
        success : function (data) {
            // set text to preferred DOM
            $("THE-DOM").html(data);
        }
    });

答案 4 :(得分:0)

如果你真的需要JS干预来改变你的参数,那么这个代码片段就应该这样做。虽然不是一个好方法。

//your JS function to manipulate the url
function downloadFile(){
  var url = "/download/myDir/exportFile";//+your extra params
  $('#fake').prop({'src':url});
}
<a href="#" onclick="downloadFile()" id="exportViewRule">Export</a>
<iframe name="fake" id="fake" style="display:none;"></iframe>