XMLHttpRequest()并输出csv文件

时间:2010-04-30 03:49:34

标签: php javascript xmlhttprequest

我可以通过向新窗口发出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吗?

1 个答案:

答案 0 :(得分:3)

您需要在新窗口中发送POST请求才能执行此操作。 我建议您创建一个隐藏表单并将其target属性设置为_blank

您应该在服务器端设置Content-disposition HTTP标头以强制下载。

您正在调用document.write,它会将文本字符串转储到浏览器中,这可能不是您想要做的。

相关问题