我在页面上嵌入了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();
可能有所帮助,但无济于事。
答案 0 :(得分:0)
所以,你的问题是你的AJAX文件返回一个要下载的文件,之后你的JS就不会继续。
这是因为AJAX不能严格用于下载文件,因此如果您检查检查器上的“网络”选项卡,您将看到该文件无法正确返回(在Firefox中它甚至不均匀)返回状态代码!)
如果AJAX呼叫永远不会结束,它永远不会成功或失败,所以没有回调!
您可以随时使用iFrame触发下载或弹出窗口。