0

こんにちは、私はこのコードの大部分を持っていますが、ファイルの「ポップイン」が不足しているため、助けを求めています。

機能は次のとおりです。ユーザーがレポート フォームに入力すると、レポートが画面に表示されます。ユーザーには、クリックしてレポートを xls 形式でダウンロードし、ローカルに保存するための最後のオプションを含むボタンがあります。

<table><tr><td></td><tr></table>スプレッドシートを戻すことができるように、xls を php として追加しました。

AddType application/x-httpd-php .xls

これは多くの場合かなり危険ですが、私の場合は不可欠でした (「スプレッドシート」はメモリ内で大きすぎて、HTML 疑似以外の方法で送信することはできませんでした)。それは断然、最も悪い選択肢ではありませんでした。

余談はさておき、データへのjQueryボタンを作成してから、ファイルをリンクのように「ダウンロード」したいのですが、これは実際には思ったより難しいです。もう 1 つのオプションは、文字列全体を取得することですが、それは私にとってあまりにも洗練されていません。postresponse.xls

これが私がこれまでに持っているものです。

<button id="download">Download As Excel</button>
<script type="text/javascript">
    $(document).ready(function () { 
        $('#download').button(); 
        $('#download').click(function(){ 
            $.post("response.xls", 
            $("form#sendform").serialize(), 
                function(data){ 
                    alert(data); 
                    var win=window.open('about:blank'); 
                    with(win.document) { 
                      open(); 
                      write(data); 
                      close(); 
                    } 
                } 
            ); 
            return false; 
        }); 
    }); 
</script>

重要な部分は、ユーザーが既に選択した既存のオプションを再シリアル化することで機能することです。それは機能します:しかし、ポップアップウィンドウでファイルを「html」として開きます-これは間違っています。リンクであるかのようにダウンロードする必要があります。

どんなアイデアでも大歓迎です。私はこのトリックを頻繁に使用しますが、常にパラメーターのない静的な xls ファイルであることに注意してください (文字通り の場合<a href=\"report.xls\">Main Report</a>)。したがって、これは著しく異なります。

4

2 に答える 2

1

以下のコードは機能します。上記の方法で $.post を利用することはできません。the old way偽の html フォームを作成して送信する必要があります。

    $('#download').click(function(){ 
            var form = document.createElement("form");
            form.setAttribute("method", "post");
            form.setAttribute("action", "response.xls");
            form.setAttribute("target", "_blank");
            $('form#sendform *').filter(':input').each(function(){
                if (typeof $(this).attr('name') != "undefined"){
                    var hiddenField = document.createElement("input");
                    hiddenField.setAttribute("name", $(this).attr('name'));
                    hiddenField.setAttribute("value", $(this).val());
                    form.appendChild(hiddenField);                      
                }
            });
            form.style.visibility="hidden";
            document.body.appendChild(form);
            form.submit();

        return false; 
    }); 
于 2013-09-20T15:28:14.307 に答える
0

これを試すことができます。サーバー上のデータを base64 にすることを忘れないでください。

<button id="download">Download As Excel</button>
<script type="text/javascript">
$(function () { 
    var btn = $('#download');
    btn.click(function(){ 
        btn.prop('disabled', true);
        $.post("response.xls", $("form#sendform").serialize(), 
            function(data){ 
                //data === base64'ified xsl
                location.href = 'data:application/vnd.ms-excel;base64,' + data;
            } 
        ); 
        return false; 
    }); 
}); 
</script>
于 2013-09-18T12:32:25.607 に答える