Javascript PHP文件下载会干扰AJAX表单提交
我在页面上嵌入了Wordpress重力表单。提交后,我获取一个ACF文件,并通过类似这样的钩子下载它Javascript PHP文件下载会干扰AJAX表单提交,javascript,php,jquery,ajax,http-headers,Javascript,Php,Jquery,Ajax,Http Headers,我在页面上嵌入了Wordpress重力表单。提交后,我获取一个ACF文件,并通过类似这样的钩子下载它 function masterstart_brochure_download() { $file = get_field('brochure_file'); header("Content-Disposition: attachment; filename=\"" . basename($file['url']) . "\""); header("Content
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 );
重力表单通过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调用完成并成功提交表单
/* 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();
}
});
我不确定我错过了什么
更新1:
我想加上
ob_clean();
flush();
可能会有帮助,但没有效果。因此,您的问题是AJAX文件返回一个要下载的文件,而JS随后不会继续 这是因为AJAX不能严格用于下载文件,因此如果您在Inspector上检查网络选项卡,您将看到文件没有正确返回(在Firefox中,它甚至没有返回状态代码!) 如果AJAX调用永远不会结束,那么它就永远不会成功或失败,因此没有回调
您可以始终使用iFrame触发下载或弹出窗口。因此,您的Gravity表单通过AJAX提交,提交到的页面将运行masterstart\u Turbool\u download(),返回要下载的文件,然后在文件下载/AJAX返回后不会继续使用JS?@JamesHunt yes。对的