Я делал такое недавно. Но по другому.
Если идет такой запрос, то формирую на php файл для скачки(временный), а клиенту возвращаю флаг, что сохранение файла:
else if (resp == 'FileGetOK_') {
// сохраняем
document.location = 'savefile.php';
document.location - это уже вызовется диалог сохранения файла. Имя файла через сессию передаем.
savefile.php:
session_start();
$f = (isset($_SESSION['loadfile'])) ? $_SESSION['loadfile'] : 'xxx.xxx';
unset($_SESSION['loadfile']);
if (file_exists($f)) {
$fn = (isset($_SESSION['loadfilename'])) ? $_SESSION['loadfilename'] : 'report' . mt_rand(100, 1000) . '.xls';
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment;filename=" . $fn);
echo file_get_contents($f);
unlink($f);
}