Я могу успешно сгенерировать CSV-файл, выдав HTML-форму POST в новом окне и используя PHP для ответа:
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename="'.date("Ymdhis").'.csv"');
print get_lines();
Однако это оставляет окно открытым и пустым.
Я хочу либо закрыть окно автоматически (при распознавании Content-Disposition), либо предпочел бы полностью игнорировать окно и просто onClick, вызвать XMLHttpRequest (), отправить переменные формы в PHP, сгенерировать файл данных и затем предложите пользователю сохранить или открыть.
Я пробовал:
var xhReq = new XMLHttpRequest();
var parameters = "";
for ( i=0; i<formObj.elements.length; i++ ) {
parameters += formObj.elements[i].name + "=" + encodeURI( formObj.elements[i].value ) + "&";
}
xhReq.open("POST", outputLocation, false);
xhReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhReq.setRequestHeader("Content-length", parameters.length);
xhReq.setRequestHeader("Connection", "close");
xhReq.send(parameters);
document.write(xhReq.responseText);
но это не работает, потому что ответ просто выводится в виде текста на экран.
Что я действительно хочу, так это когда я получу все данные, чтобы выполнить новый вызов header () без открытия нового окна - возможно ли это с помощью javascript?