Я использую ExtJS для создания формы, которая генерирует отчет из данных в базе данных в формате CSV. После того, как пользователь выберет простой диапазон дат для извлечения данных и отправит, запустив следующий код:
var frm = document.createElement('form');
frm.id = 'frmDummy';
frm.name = id;
document.body.appendChild(frm);
Ext.MessageBox.wait('Generating CSV File ...');
Ext.Ajax.request({
url: 'csv_extract_ajax.php?start_time='+txtDateFieldFrom.getRawValue()+'&end_time='+txtDateFieldTo.getRawValue(),
method : 'POST',
form: Ext.fly('frmDummy'),
isUpload: true,
success: function(o, r, n){
Ext.MessageBox.updateProgress(1);
Ext.MessageBox.hide();
},
failure: function(o, r, n){
Ext.MessageBox.updateProgress(1);
Ext.MessageBox.hide();
},
callback: function(o, r, n){
Ext.MessageBox.updateProgress(1);
Ext.MessageBox.hide();
},
scope: this
});
Связанный файл php просто выводит строку CSV, рабочий файл.
Поскольку isUpload имеет значение true, кажется, что обратный вызов никогда не возвращается пользователю. Как только я удаляю его, вызывается обратный вызов, но файл не загружается на клиент.
Проблема сейчас, все работает отлично, но MessageBox никогда не исчезает, так как обратные вызовы никогда не вызываются (успех, сбой или обратный вызов)
Есть идеи? : Р
Дополнительная информация:
Заголовок PHP:
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: private");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$filename");
header("Accept-Ranges: bytes");