我想下载一个文本文件(例如:-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>
答案 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>