Intereting Posts
Миграции доктрины: в пространстве имен "" отсутствуют команды Предупреждение: openssl_pkcs7_sign () : ошибка получения секретного ключа в C: \ xampp \ htdocs \ this \ tcpdf \ tcpdf.php в строке 8366 Как я могу добавлять файлы cookie при использовании кука-печенья в CURL? Неисправность токена Laravel csrf для запроса ajax POST Загрузите файлы в php Почему, когда я отправляю значение текстового поля в AJAX скрипту PHP, он не работает и дает мне ошибку синтаксического анализа JSON? Phpdoc Нет записей для этого файла Kohana v3.1.0 ORM _ignored_columns – теперь, когда он ушел, что мне делать вместо этого? PHP не сохраняет данные в базу данных Как слить Subarray в PHP наиболее легко? Разделите все, начиная от строки, кроме числа и знаменателя валюты Загрузите несколько файлов в виде zip-файла, используя php Неустранимая ошибка: обратный вызов массива должен содержать индексы 0 и 1 curl – как перейти на следующую страницу? Как хэш-и солевые пароли

XMLHttpRequest () и вывод csv-файла

Я могу с успехом создать файл 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 , который выгружает текстовую строку в браузер, это скорее всего не то, что вы хотите сделать.