XMLHttpRequest () и вывод файла CSV - PullRequest
       23

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

4 голосов
/ 30 апреля 2010

Я могу успешно сгенерировать 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?

1 Ответ

3 голосов
/ 30 апреля 2010

Вам необходимо отправить запрос POST в новом окне, чтобы сделать это. Я бы посоветовал вам создать скрытую форму и установить для ее атрибута target значение _blank

Вы должны установить HTTP-заголовок Content-disposition на стороне сервера для принудительной загрузки.

Вы звоните document.write, который выводит текстовую строку в браузер, вероятно, это не то, что вы хотите сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...