Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PHP文件下载会干扰AJAX表单提交_Javascript_Php_Jquery_Ajax_Http Headers - Fatal编程技术网

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

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

我在页面上嵌入了Wordpress重力表单。提交后,我获取一个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 );
重力表单通过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。对的