您能否基于ajax响应中的表单提交数据提示下载?

问题描述

| 我使用AJAX POST将表单数据发送到外部脚本,并尝试在提交时隐藏表单并提示用户下载脚本。 脚本本身运行良好(使用fpdf输出pdf文件以供下载)。出于某种原因,提示用户进行下载尽管没有成功。 我的Ajax请求当前为:
        $.ajax({
            url: \"file.PHP\",type: \"POST\",data: data,cache: false,success: function (html) {
                //hide the form
                $(\'#form\').fadeOut(\'slow\');

                //display results
                $(\'#form_results\').fadeIn(\'slow\');
                $(\"#form_results\").html(html);
            }       
        });
file.PHP(本身)将使用FPDF生成显示PDF。通过将Output设置为I,将文档输出到浏览器,设置为'D',如果我直接访问file.PHP,通常会强制下载。 有任何想法吗?     

解决方法

不幸的是,您不能直接从ajax调用中强制下载。最好的选择是通过ajax提交表单,并让ajax响应一个URL,您可以将用户重定向到该URL,以开始下载。但是,仅FYI,使用location.href到发送标题以强制在IE中下载的页面的操作,就会导致黄色安全栏出现在页面顶部。这种情况发生在IE8中,不确定其他版本。 FF和Chrome没问题。 编辑: 只是想添加一下,当您确实将某人重定向到强制下载的页面时,他们实际上并没有离开他们当前所在的页面。因此,他们不必重新加载ajax页面或其他任何内容。下载对话框将会出现。因此,如果您使用的是index.php并说location.href = \'download.php \',则download.php会强制进行下载。您只需要下载对话框,而不必离开index.php。 编辑2: 其实已经有很多问题了。 https://stackoverflow.com/search?q=force+download+over+ajax     ,问题是您尝试显示结果,但是它是隐藏的形式。尝试类似的东西:
            //hide the form
            $(\'#form\').children().fadeOut(\'slow\');

            //display results
            $(\'#form results\').fadeIn(\'slow\');
            $(\"#form results\").html(html);
这样,每个孩子都会被隐藏,但父母本身不会。