Я могу успешно создать файл CSV путем выдачи формы HTML POST в новом окне и использовать PHP ответить:XMLHttpRequest() и вывода файла CSV
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 - просто повторить - использование XMLHttpRequest в этом случае не указывается. Простое скрытое или динамически созданное представление формы для «_blank» подходит –
похоже, что вы уже используете форму - вам, вероятно, не нужно создавать новую скрытую форму, просто добавьте target = "_ blank" в вашу текущую форму и канаву javascript/XHR. также обязательно включите соответствующие заголовки, если вы хотите, чтобы файл инициировал загрузку. в PHP: заголовок («Content-Disposition: attachment; filename = someFileName.csv»); – Keith
Я уже использую новое окно - я стараюсь избегать этого, так как это действительно не требуется ... Возможно, вопрос должен быть слегка перефразирован. Как я могу это сделать, и окно автоматически закрывается, когда оно осознает, что оно имеет Content-Disposition: attachment; имя файла = file.csv; – sjw