我试图有一个文件下载链接,同时通过Ajax提交一个帖子。
有点像这样:
<form action="" method="post" id="form">
<input type="text" name="email" id="email" value="" />
<input type="hidden" name="subscriber" id="subscriber" value="newsletter" />
<a href="/files/application.exe" id="download">trial download</a>
</form>
<script type="text/javascript" src="jquery"></script>
<script type="text/javascript">
// prevent default submit action caused by enter key etc.
$("#form").bind('submit',function(event){event.preventDefault();});
$('#download').click(function(){
$.post(location.href, $('#form').serialize(), function(){
$('#form').hide();
});
});
</script>
问题是,下载会触发并显示下载对话框(正确),它也会触发Click事件,甚至会在Click事件函数中触发控制台日志,它甚至会触发Post请求,但Post请求永远不会在服务器上结束。我在tail-f上有访问日志文件,它只显示get on the application.exe,但不显示来自$.post()的post。在Firebug中,它显示了帖子
http://ip/folder/
由location.href给出,它用红色标记,带有一个小X和一个空的响应字段。对Firebug来说很难,它看起来像是被发送到服务器上…
我对此的解释是,href可以消除$.post()中的风,在它被激发之前,它会将浏览器重定向到下载文件。不更改页面本身,但停止通过xhr发布的操作…
有人知道一个很好的解决方法吗?我真的需要本地的href链接到应用程序,以避免IE弹出这个愚蠢的文件下载警告栏,同时我需要Ajax提交表单…
谢谢!