你能否根据ajax响应中的表单提交数据提示下载?

时间:2011-05-20 21:47:25

标签: php javascript 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。通过将输出设置为I,文档输出到浏览器,设置为“D”,如果我只是直接访问file.php,它通常会强制下载。

任何想法?

2 个答案:

答案 0 :(得分:1)

很遗憾,您无法直接从ajax调用强制下载。您最好的选择是通过ajax提交表单并让ajax响应一个url,您可以将用户重定向到开始下载。但是,仅仅是一个FYI,使用location.href来发送一个页面以强制在IE中下载将导致黄色安全栏出现在页面顶部。这种情况发生在IE8中,不确定其他版本。 FF和Chrome没有问题。

编辑:

只是想添加,当您将某人重定向到强制下载的页面时,他们实际上并没有离开他们当前所在的页面。所以他们不必重新加载ajax页面或任何东西。下载对话框将显示出来。所以如果你在index.php上,你说location.href ='download.php'和download.php强制下载。您只需获得下载对话框,不要留下index.php。

EDIT2:

实际上已经存在很多相关问题。

https://stackoverflow.com/search?q=force+download+over+ajax

答案 1 :(得分:0)

问题是你试图显示结果,但它是隐藏的形式。尝试类似:

            //hide the form
            $('#form').children().fadeOut('slow');

            //display results
            $('#form results').fadeIn('slow');
            $("#form results").html(html);

这样,每个孩子都会被隐藏,但父母本身不会。