我很确定我在想这个,但我无法弄明白。我有一个dojo Button对象,我想在单击它时执行.php文件。 php脚本运行一个查询并从中构造一个.xls文件,然后提示用户下载或打开。
当我点击按钮时,我收到“加载的xhrGet”日志,但提示永远不会出现,所以我不相信脚本实际上正在运行。
<button data-dojo-type="dijit.form.Button" id="export_xls_button">Export to .xls
<script type="dojo/method" data-dojo-event="onClick" >
dojo.xhrGet({
url: 'subRoutines/exportXLS.php',
load: function(response){
console.debug("loaded xhrGet");
},
error: function(error){
console.debug("error loading xhrGet");
}
});
</script>
</button>
感谢您提供任何帮助或建议。
编辑:当我在网络浏览器中直接访问它并且在服务器上打开php时,脚本运行正常。
答案 0 :(得分:3)
您无需使用XHR导出文件。您可以使用单击标准链接(或dojo按钮),单击该链接时会执行subRoutines/exportXLS.php
。单击链接时,脚本会像正常一样构建文件,并在不离开页面的情况下将文件和相应的http标头发送回用户。没有新的位置标题发送到浏览器,只是一个文件。
这是一种用于在PHP中导出CSV文件的简单方法(您可能只需要标题):
$fh = fopen("php://output", 'w');
fputcsv($fh, $csv_headers_array, ",", '"');
foreach ($csv_content_array as $line) {
fputcsv($fh, $line, ",", '"');
}
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=filename.csv");
fclose($fh);
exit;
你的dojo按钮变成了:
<button data-dojo-type="dijit.form.Button" id="export_xls_button">
Export to .xls
<script type="dojo/method" data-dojo-event="onClick" >
window.location = 'subRoutines/exportXLS.php';
</script>
</button>