PHP文件下载会干扰AJAX表单提交

时间:2017-07-13 08:39:22

标签: javascript php jquery ajax http-headers

我在页面上嵌入了Wordpress Gravity Form。提交后,我获取一个ACF文件并通过钩子下载它。

function masterstart_brochure_download() {
    $file = get_field('brochure_file');
    header("Content-Disposition: attachment; filename=\"" . 
    basename($file['url']) . "\"");
    header("Content-Type: application/force-download");
    header("Content-Length: " . $file['sizes']['thumbnail']);
    header("Connection: close");

    exit();
}
add_action( 'gform_after_submission_21', 'masterstart_brochure_download', 10, 2 );

Gravity表单通过AJAX提交。一旦表单提交,我打开一个模式,感谢用户提交表单。

/* After Form Submission */
$(document).on("gform_confirmation_loaded", function (e, form_id) {
    // If the brochure download form is submitted
    if(form_id == 21) {
        var brochureModal = $('[data-remodal-id=brochure-
        download]').remodal();
        brochureModal.open();
    }
});

上面的Wordpress钩子正确下载文件,但阻止AJAX调用完成并成功提交表单。

我不确定我错过了什么。

更新1: 我想添加

ob_clean();
flush();

可能有所帮助,但无济于事。

1 个答案:

答案 0 :(得分:0)

所以,你的问题是你的AJAX文件返回一个要下载的文件,之后你的JS就不会继续。

这是因为AJAX不能严格用于下载文件,因此如果您检查检查器上的“网络”选项卡,您将看到该文件无法正确返回(在Firefox中它甚至不均匀)返回状态代码!)

如果AJAX呼叫永远不会结束,它永远不会成功或失败,所以没有回调!

您可以随时使用iFrame触发下载或弹出窗口。