Поместите перенаправление, когда отправка формы прошла успешно. Если перенаправление попадет в файл, который браузер не может отобразить - начнется загрузка.
В моем случае я возвращаю код JavaScript из обработчика отправки формы, который формирует виджет eval () s. Этот код может быть перенаправлением на штраф, который только что был произведен серверной частью.
Может быть, мой пост в блоге о лучших практиках AJAX Forms будет полезен:
http://agiletoolkit.org/blog/forms/
Если вы хотите, чтобы все было просто, то:
- добавить обработчик form.onSubmit, он должен предотвращать действие по умолчанию, собирать данные формы и отправлять на сервер. Вы можете использовать некоторый плагин представления ajax для jQuery.
- сервер должен проанализировать данные, подготовить файл и отправить обратно имя файла в браузер.
- Ваш JS-код выполняется после завершения передачи (обратного вызова) и перенаправляет в файл через document.location.
В Agile Toolkit все будет так просто:
$f=$p->add('MyForm');
if($f->isSubmitted()){
$f->js()->univ()->location(prepare_file($f->getAllData()))->execute();
}