我可以通过向新窗口发出html表单POST并使用PHP来响应来成功生成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吗?
答案 0 :(得分:3)
您需要在新窗口中发送POST
请求才能执行此操作。
我建议您创建一个隐藏表单并将其target
属性设置为_blank
您应该在服务器端设置Content-disposition
HTTP标头以强制下载。
您正在调用document.write
,它会将文本字符串转储到浏览器中,这可能不是您想要做的。