2016-05-19 11 views
0

WordPressページにサーバー上の複数の.txtファイルが含まれているselect要素があります。選択ドロップダウンからファイルの1つを選択すると、ファイルをブラウザにダウンロードして、ブラウザの保存ダイアログを有効にします。サーバーのファイルをブラウザの保存ダイアログに読み込む

ダウンロードを行う1つの方法は、選択ドロップダウンのオプション要素の代わりに、クリックされたリンクにファイルを置くことです。私のような何かを行うことができます:

<a href="/directory/file1.txt download> file1.txt </a> 

をしかし、その後、ユーザーは、代わりにドロップダウンからオプションを選択することができるというのリンクの束の中から選択する必要があります。上記のようなリンクを実行するには、ドロップダウンから選択肢を選択する方法はありません。

私はまた、選択ドロップダウンを感じたのjQueryの変更ハンドラを持って、その後、jQueryのAjaxのポストコールしてPHPまでの選択を通過したと同様にPHPで何かを実行することができます:

<?php 
    header("Content-Disposition: attachment"); 
    header("Content-Type: text/plain"); 
    readfile("/directory/file1.txt"); 
?> 

しかし、私の場合ajax呼び出しでPHPに到達しました

は、ブラウザに接続するか、代わりにデータをajax呼び出しに戻します。

誰かが選択した選択肢からダウンロードを開始する最も良い方法はありますか?

おかげ

は=====は

+0

私はあなたのソリューションが期待どおりに動作することを確信しています – lud1977

+0

私はphp header/readfileソリューションを試しましたが、データはブラウザにダウンロードされるのではなく、Ajax success関数の最初のパラメータとして戻ってきました。恐れ。 – Steve

+0

申し訳ありませんが、私は実際にはあなたのソリューションを誤解しています...私はまだあなたのソリューションは大丈夫だと思う、あなたはajaxを介してアクセスする代わりにPHPスクリプトを指すtop.location.hrefを設定する必要があります。content-disposition:attachmentヘッダーを設定しているため、ブラウザはダウンロードを促します。現在のウィンドウは同じままでなければなりません。 – lud1977

答えて

1

私はすべてのセットアップをテストしていないことに注意してください、私は残さずにダウンロードをトリガするtop.location.hrefを使用しての提案されたソリューションをテストしました現在のページ、それは動作します。

ので、あなたは3つのことを必要とする、あなたはjQueryのを使用していると仮定OK:

の1-ディスペンサースクリプト:

<?php 
    header("Content-Disposition: attachment"); 
    header("Content-Type: text/plain"); 
    readfile('/directory/'.$_GET['filename']); 
?> 

(これはURL http://www.yourdomain.com/get_feed.phpで到達可能で、パラメータfilenameを取る必要があります - - あなたがアクセスしたくないサーバー上の他のファイルにアクセスするためにスクリプトを悪用することができないことを確認するために、このチェックを追加するか、おそらくホワイトリストを使用するか、パラメータを直接使用するスクリプトはVERY安全でない)

2 - のようなあなたが到達するURLのリストと、ページ内のHTMLを選択し、ドロップダウン:

<select id="the-dropdown"> 
    <option value="">Choose a file...</option> 
    <option value="http://www.yourdomain.com/get_feed.php?filename=file1.txt">file1.txt</option> 
    <option value="http://www.yourdomain.com/get_feed.php?filename=file2.txt">file2.txt</option> 
</select> 

3-などのjsの抜粋:

(function($) { 
    $(document).ready(function() { 
     $('#the-dropdown').change(function() { 
      var that = $(this); 
      if (that.val() !== '') { 
       top.location.href = that.val(); 
      } 
     }); 
    }); 
})(jQuery); 

そして、それはですそれ。

+0

ありがとう!私はあなたがそのすべてのトラブルに行くことを意味しませんでしたが、私はそれを感謝します。 – Steve

関連する問題