我在javascript中有一个名为"dumpData"
的函数,我从html页面上的按钮调用**onlick="dumpData(dbControl);"*
它的作用是返回设置的xml文件(现在到一个警告框) 。我想将其作为文件下载返回给用户。当点击打开文件下载框并要求用户保存或打开它时,有没有办法创建按钮? (类似于右键单击并将目标保存为)...
或者可以将它发送到php文件并使用export();?
不确定如何将这样的长字符串发送到php并简单地将其作为文件下载发回。
丹尼斯
答案 0 :(得分:1)
我认为你不能用javascipt做到这一点,至少没有一个好的解决方案。
以下是如何在PHP中强制下载文件:
$file = "myfile.xml";
header('Content-Type: application/xml');
header("Content-Disposition: attachment; filename='$file'");
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
您可以使用readfile
直接显示内容,而不是使用echo
输出文件。
/编辑:地狱,有人更快:)。
已编辑:
只是一个概念证明..但你明白了!
而不是
<a onlick="dumpData(dbControl); href="#">xml file</a>
你可以这样:
<a href="foo/bar/generate_xml.php?id=1">xml file</a>
然后是这样的:
// Assuming your js dumpData(dbControl); is doing the same thing,
// retrieve data from db!
$xml = mysql_query('SELECT * FROM xml WHERE id= $_GET['id'] ');
header("Content-type: text/xml");
echo $xml;
答案 1 :(得分:0)
通过表单将XML发布到php脚本,然后使用Content-Disposition: attachment; filename=xxx.xml
标头将其写回客户端。
<form name="xml_sender" action="i_return_what_i_was_posted.php" method="POST">
<input type="hidden" name="the_xml" value="" />
</form>
然后用js
function dumpData(arg) {
var parsedXML = ??? //whatever you do to get the xml
//assign it to the the_xml field of the form
document.forms["xml_sender"].the_xml.value = parsedXML;
//send it to the script
document.forms["xml_sender"].submit();
}
不记得这是否会丢失原始窗口,如果是,post to an iframe。
答案 2 :(得分:0)
我走上了这条路:
HTML代码
<script type="text/javascript">
$(document).ready(function() {
$("#save").click(function(e) { openDialog() } );
});
</script>
<button id="save" >Send for processing.</button>
javascript代码:
function openDialog() {
$("#addEditDialog").dialog("destroy");
$("#Name").val('');
$("#addEditDialog").dialog({
modal: true,
width: 600,
zIndex: 3999,
resizable: false,
buttons: {
"Done": function () {
var XMLname = $("#Name").val();
var XML = dumpXMLDocument(XMLname,geomInfo);
var filename = new Date().getTime();
$.get('sendTo.php?' + filename,{'XML':XML}, function() {
addListItem(XMLname, filename + ".XML");
});
$(this).dialog('close');
},
"Cancel": function () {
$("#Name").val('');
$(this).dialog('close');
//var XMLname = null;
}
}
});
}
PHP代码,我刚决定将文件写入目录。由于我在javascript中创建了文件名并传递给PHP,因此我知道它的位置和文件名,因此我填充了一个带有文件链接的侧面板。
<?php
if(count($_GET)>0)
{
$keys = array_keys($_GET);
// first parameter is a timestamp so good enough for filename
$XMLFile = "./data/" . $keys[0] . ".kml";
echo $XMLFile;
$fh = fopen($XMLFile, 'w');
$XML = html_entity_decode($_GET["XML"]);
$XML = str_replace( '\"', '"', $XML );
fwrite($fh, $XML);
fclose($fh);
}
//echo "{'success':true}";
echo "XMLFile: ".$XMLFile;
?>
我不知道为什么,但是当我将XML发送到我的php文件时,它会在所有qoutes和双引号上写出包含转义章程的内容。所以我必须做一个str_replace来正确格式化xml文件。有人知道为什么会这样吗?