通过PHP命令I found this code:
备份MySQL数据库<?php
$DBUSER="user";
$DBPASSWD="password";
$DATABASE="user_db";
$filename = "backup-" . date("d-m-Y") . ".sql.gz";
$mime = "application/x-gzip";
header( "Content-Type: " . $mime );
header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
$cmd = "mysqldump -u $DBUSER --password=$DBPASSWD $DATABASE | gzip --best";
passthru( $cmd );
exit(0);
?>
当保存到.PHP文件并加载页面时,代码效果很好。它会自动将.sql.gz file
下载到浏览器的下载文件夹,无需用户干预。但是,我只需要在用户按下按钮时执行 - 因此,通过AJAX。
但是,当我通过AJAX调用代码时,没有任何反应。如果我警告AJAX命令的输出,我会得到二进制文件内容。
那么,如何将AJAX输出保存到浏览器的下载文件夹中?
这是我调用backup.php文件的jQuery代码:
$('#btnBackupNow').click(function(){
$.ajax({
type: 'post',
url: 'ajax/dobackup.php',
success: function(d){
//alert(d); //<=== displays binary data (gzipped)
//$('#btnBackupNow').fadeOut();
}
});
});
PS - 如果您喜欢备用验证码,请访问原始问题并提前注册the answer I got it from。
SOLUTION:
根本不要使用AJAX。
将上述代码保存(使用正确的密码等),放在单独的PHP文件中,例如do_db_backup.php
。
页面上有一个隐藏的iFrame:
<iframe id="iBkup" style="display:none;"></iframe>
点击按钮后,将iFrame的src=
属性设置为包含备用代码的PHP文件:
$('#btnBackupNow').click(function(){
$('#iBkup').attr('src','do_db_backup.php');
});
点击按钮观看神奇的事情。