将JS变量数据发送到可下载页面

时间:2012-06-19 14:54:13

标签: php javascript

这个javascript函数接受JSON并将其格式化为XML。数据是一个很长的XML字符串,我想让用户下载。我正在尝试使用ajax将数据发布到php页面,wichi将创建该文件,然后允许用户下载它。

 json2xml(eval(data));

JS

 $.ajax({
   type: 'POST',
   url: 'download/functions.php',
   data: xml2,
   dataType: XML
 });

我已经使用这个PHP函数写入文件,但我不知道现在如何将js变量发送到此函数。

 $data = $_POST['xml2'];

 writetoxml($data, 'WF-XML'.$current. '.xml'); 

 function writetoxml($stringData, $myFile) {
    $current = date('m-d-Y-g-i-s');
    $fh = fopen('download/'.$myFile, 'w') or die("can't open file");
    fwrite($fh, $stringData);
    fclose($fh);
    download($file);
  }

 function downloadFile($file) {

 if(!file)
 {
     // File doesn't exist, output error
     die('file not found');
 }
 else
 {
     // Set headers
     header("Cache-Control: public");
     header("Content-Description: File Transfer");
     header("Content-Disposition: attachment; filename=$file");
     header("Content-Type: application/csv");
     header("Content-Transfer-Encoding: binary");

     // Read the file from disk
     readfile($file);
     exit;
 }

}

目前返回服务器500错误。

1 个答案:

答案 0 :(得分:1)

更新

使用您提供的jQuery AJAX调用:

$.ajax({
   type: 'POST',
   url: 'download/yourphpscript.php',
   data: { xml: xml2 },
   dataType: XML
});

你的PHP看起来像这样:

<?php
$xml = $_POST['xml'];
// Not sure where you're trying to get $file from

writetoxml($xml, $file);

function writetoxml($stringData, $myFile) {
    $current = date('m-d-Y-g-i-s');
    $fh = fopen('download/'.$myFile, 'w') or die("can't open file");
    fwrite($fh, $stringdata);
    fclose($fh);

    download($file);
}

function download($file)
{
    if (file_exists($file)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename='.basename($file));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        ob_clean();
        flush();
        readfile($file);
        exit;
    }
}
?>

尝试将对象(在本例中为{ key: value })传递到$.ajax调用的data属性中,以便您可以通过密钥引用它。在这种情况下,我们的密钥是xml所以在PHP方面,我们抓取$_POST['xml'],这应该给你xml2的内容。

下载代码取自PHP docs on readfile()。但是,我仍然不禁认为有更好的方法来实现这一目标。

HIGHLY 建议不要让用户有效地创建一个包含他们想要的服务器的Web可访问文件。如前所述,澄清您的总体目标会有所帮助。我想我理解你正在尝试做什么,但为什么你正在做的事情会很高兴知道,因为可能有更好,更安全的方法来实现相同的结果