1

私はこのようなphpファイルを持っています:

<?php

header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"my-data.csv\"");

$data = stripcslashes($_REQUEST['data']);
echo $data; 

?>

(適切にフォーマットされた)データを投稿すると、csvファイルが返されます。私はこのようにします:

    var data = $('table').toCSV('tbody > tr');
    $('table').addEvent('click', function(){            
        new Request({
                url: 'getCSV.php',
                method: 'post'                  
        }).send('data=' + data);            
    }); 

Firebugでは、リクエストが機能し、応答が正常であることがわかります。ただし、[ダウンロード]ダイアログは表示されません。それを修正する方法は?PHPファイルに別のヘッダーが必要ですか?

4

3 に答える 3

1

私はこれにJSを変更しました:

    var data = $('lijst').toCSV('tbody > tr');

    var form    = new Element('form', {method: 'post', action : 'getCSV.php'});
    var field   = new Element('input', {type: 'hidden', name: 'data', value: data});
    var submit  = new Element('input', {'type' : 'submit', 'value' : 'Download'});
    form.adopt(field,submit);

    form.inject($('lijst').getElement('caption'));

これにより、テーブルに素敵なダウンロード ボタンが追加され、ブラウザがフォームの送信に従うと、ダウンロード ダイアログがポップアップします。私と一緒に考えてくれてありがとう。

于 2012-08-29T09:46:22.580 に答える
1

Gavin が言ったように、ajax 呼び出しはダウンロードを強制できず、応答は単に変数に保存されます。非表示のフォームと POST データを作成する必要があります。このような:

var data = $('table').toCSV('tbody > tr');

$('table').on('click', function(){            
    $('<form action="getCSV.php" target="_new" method="POST" style="display: none;">'+
        '<textarea name="data">'+data+'</textarea>'+
      '</form>')
    .appendTo('body')
    .submit();          
}); 

PS私はそれをテストしていません。

于 2012-08-29T09:38:51.377 に答える
0

これを行う別の方法は、iframe を利用することです。したがって、「ダウンロード」ボタンをクリックすると、ページに iframe が挿入されます。あなたがそれをきれいにすることができた後。

document.body.inject(
 new Element('iframe', {
    'src': 'http://url.to.download', 
    'style': {
        'display': 'none'
     }
 })
);
于 2012-09-01T11:26:02.353 に答える