0

この JavaScript 関数は JSON を受け取り、それを XML にフォーマットします。データは長い XML 文字列で、ユーザーがダウンロードできるようにしたいと考えています。私は ajax を使用してデータを php ページに投稿しようとしていますが、これによりファイルが作成され、ユーザーがそれをダウンロードできるようになります。

 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 }は呼び出しの data プロパティに渡し$.ajaxて、キーで参照できるようにします。この場合、キーはxmlPHP 側にあるため、取得$_POST['xml']すると xml2.

ダウンロード コードはreadfile() の PHP ドキュメントから取得されました。ただし、これを達成するためのより良い方法があると思わずにはいられません。

ユーザーがサーバー上で必要なものを含む Web アクセス可能なファイルを効果的に作成できないようにすることを強くお勧めします。前述のように、一般的な目標を明確にすることは役に立ちます。私はあなたがやろうとしていることを理解していると思いますが、同じ結果を達成するためのより良い、より安全な方法があるかもしれないので、なぜそれをしているのかを知っておくといいでしょう.

于 2012-06-19T15:55:39.407 に答える