Я могу с успехом создать файл 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?
Для этого вам нужно отправить запрос POST
в новое окно. Я предлагаю вам создать скрытую форму и установить ее target
атрибут _blank
Вы должны установить HTTP-заголовок Content-disposition
на стороне сервера, чтобы принудительно загрузить.
Вы вызываете document.write
, который выгружает текстовую строку в браузер, это скорее всего не то, что вы хотите сделать.