Javascript 以AJAX';谁的反应?
我有一个通用的Ajax调用例程,用于调用node.js中的函数。此函数从服务器(主要是xls)读取文件,然后将其流回到客户端 下面是我在Node.js(服务器端)中的实现: 这是我使用的ajax调用Javascript 以AJAX';谁的反应?,javascript,jquery,ajax,node.js,Javascript,Jquery,Ajax,Node.js,我有一个通用的Ajax调用例程,用于调用node.js中的函数。此函数从服务器(主要是xls)读取文件,然后将其流回到客户端 下面是我在Node.js(服务器端)中的实现: 这是我使用的ajax调用 $('#submit').click(function() { $.ajax({ url: '/', type:'POST', data: data, dataType: 'json', }).done(function(data) {
$('#submit').click(function()
{
$.ajax({
url: '/',
type:'POST',
data: data,
dataType: 'json',
}).done(function(data) {
console.log(data);
});
})
我成功地在控制台中打印了二进制数据(console.log(data)
)。我的问题是如何将此数据
转换为具有适当扩展名的文件,然后提示浏览器保存它们
有任何建议或其他解决方法吗?尝试使用
FileReader
,Blob
,a
元素,下载
属性
$('#submit').click(function() {
$.ajax({
url: '/',
type:'POST',
data: data,
dataType: 'json',
}).done(function(data) {
console.log(data);
var reader = new FileReader();
reader.onload = function(e) {
$("a").attr({"href": e.target.result, "download":"filename"})
.get().click()
}
reader.readAsDataURL(new Blob([data]));
});
})
也许只需使用
window.location.href=“您的url”
然后让浏览器来完成所有这些?不行,因为这个文件是在请求期间创建的,所以它以前不存在。这实际上并不重要。node.js返回文件的内容。您可以让浏览器处理文件保存业务,也可以(如下面的答案所示)自己动手。谢谢。它可以工作,但是,因为我必须在更大的系统中使用angular(MVC模型)实现它,所以我不能这样做。所有请求必须通过模型。这就是我在这里显式编写ajax函数的原因,我希望有一个可以用angular实现的解决方案。但是你的工作在jQuery实现中,但你仍然在尝试实现它。我以前从未用过Blob,我很期待。但是,我对$(“a”)有一个问题,那是什么?@denny$(“a”)
被用作文档中现有
元素的示例。尝试在文档中添加一个
元素,该元素具有唯一的类名或id
,将$(“a.unique”)
或$(“a#unique”)
替换为$(“a”)
,后跟.attr({“href”:e.target.result,“下载”:“filename”)。get()。单击()
我收到错误:“click”函数未定义。是否需要添加HTML?“是否需要添加HTML?”是否确定FIleReader与节点的二进制数据类型兼容?像上面的Excel XLSX?我照你说的做了。文件已成功下载,但我的办公室无法打开它,并说它已损坏,尽管该文件非常好。
$('#submit').click(function() {
$.ajax({
url: '/',
type:'POST',
data: data,
dataType: 'json',
}).done(function(data) {
console.log(data);
var reader = new FileReader();
reader.onload = function(e) {
$("a").attr({"href": e.target.result, "download":"filename"})
.get().click()
}
reader.readAsDataURL(new Blob([data]));
});
})