javascript将函数的数据作为文件返回

时间:2010-05-20 19:21:30

标签: php javascript

我在javascript中有一个名为"dumpData"的函数,我从html页面上的按钮调用**onlick="dumpData(dbControl);"*它的作用是返回设置的xml文件(现在到一个警告框) 。我想将其作为文件下载返回给用户。当点击打开文件下载框并要求用户保存或打开它时,有没有办法创建按钮? (类似于右键单击并将目标保存为)...

或者可以将它发送到php文件并使用export();?不确定如何将这样的长字符串发送到php并简单地将其作为文件下载发回。

丹尼斯

3 个答案:

答案 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文件。有人知道为什么会这样吗?