0

这个 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 错误。

4

1 回答 1

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.xml 的内容。

下载代码取自readfile() 上的 PHP 文档。但是,我仍然不禁想到有更好的方法来实现这一点。

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

于 2012-06-19T15:55:39.407 回答