代码之家  ›  专栏  ›  技术社区  ›  Toby

正在触发用于下载的href链接,并使用jquery启动带有$.post()的.click事件

  •  2
  • Toby  · 技术社区  · 15 年前

    我试图有一个文件下载链接,同时通过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提交表单…

    谢谢!

    2 回复  |  直到 14 年前
        1
  •  2
  •   leepowers    15 年前

    false

    $('#download').click(function(){
        var href = $(this).attr('href');
        $.post(location.href, $('#form').serialize(), function(){
             $('#form').hide();
             document.location.href= href;
        });
        return false;
    });
    
        2
  •  0
  •   Toby    15 年前

    对我自己的问题给出一个有效的答案:

    $('#download').click(function(){
        setTimeout(function(){
            $.post(location.href, $('#form').serialize(), function(){
                 $('#form').hide();
            });
        },1000);
    });