2016-08-04 28 views
1

私は関連性のない別のプロジェクトのテーマを作成するテーマ構築ウェブサイトを持っています。私はそれらにデータを持ついくつかの異なる入力を持っています。私はデータを取得し、変数に格納することができます。私がダウンロードボタンをクリックすると、変数を.phpファイルに送信し、そのファイルをダウンロードします。私はそれを送っていると信じていますが、データをダウンロードすることは難しい部分のようです。投稿を使ってデータを投稿してからダウンロードする

$("#download-theme").click(function() { 
    $(function() { 
     $.ajax({ 
      type: "POST", 
      url: 'download.php', 
      data: ({ 
       value: value 
      }), 
      success: function(data) { 
       alert(data); 
      } 
     }); 
    }); 
}); 

これは正しい値でアラートが表示されるので、download.phpファイルに送信されると思います。私が次にやりたいことは、.txtファイルとしてphpファイルのデータをダウンロードすることです。たぶん私はPHPファイルに送信することでそれを複雑にしているのか分かりません。

私は変数からデータを取得してファイルに入れ、ユーザーにダウンロードさせたいと思っています。

編集:私はquentinoの応答を見て、それは動作しますが、私は1つの送信ボタンで転送する必要がある5つの入力があります。

<input type="text" name="variable1" /> 
<input type="text" name="variable2" /> 
<input type="text" name="variable3" /> 
<input type="text" name="variable4" /> 
<input type="text" name="variable5" /> 
<input type="submit" value="send"/> 
+0

AJAXからダウンロードすることはできません。 PHPコードが作成するファイルの場所にGETリクエストを送る必要があります。また、クリックハンドラ内にドキュメントレディハンドラが必要なく、 'data'オブジェクトの周りのカッコを削除することもできます。 –

+0

私はそれを少し見渡しました。クライアントがファイルをダウンロードする方法を混乱させていました。 –

答えて

2

本当にあなたはajaxを使用する必要がありますか?隠しフォームを使用してそれを行い、onclickイベントでデータを設定して送信することができます。シンプルな1つのファイル例:

<?php 
if (isset($_POST['data'])) { 
    header("Content-disposition: attachment; filename=\"test.txt.\""); 
    echo $_POST['data']; 
} else { 
?> 
<html> 
    <body> 
     <form method="post"/> 
      <input type="text" name="data" /> 
      <input type="submit" value="send"/> 
     </form> 
    </body> 
</html> 
<?php } ?> 
+0

私は本当にajaxを使いたいと思っていませんでしたが、5つの入力があります。私は1つの送信ボタンでそれを行う方法を理解できませんでした。 5つのボタンをクリックすることなく、1つのボタンをクリックするだけで、その5つの入力がすべて送信されるようにしたいと思います。これは可能ですか?私がしなければならないのは、5つの入力をecho $ _POST ['input1']のようにエコーすることができることです。エコー$ _POST ['input2']; echo $ _POST ['input3']; 1つのボタンを押すだけで、 –

+0

@JohnsonD​​oe .. 1つのフォームでは、すべてが1回のクリックで送信され、$ _POST ['input1']を受信します。 $ _POST ['input2']; $ _POST ['input3'];それぞれのファイルをエコーし​​てユーザに返すことができます。 – quentino

+0

途中で他のコードがたくさんあるため、同じフォームになることはできません。それ以外のコードは、

のタグの間にあるのは重要ですか?または、それらの間に何があるかにかかわらず、それらをそこに置き、入力を呼び出すことはできますか? –

0

私が読んだところでは、ダウンロードされた形式にAJAXを介してコンテンツをプルする実際の方法はありません。私はContent Dispositionを使ってテストしましたが、それでも動作しません。

あなたがチェックアウトする場合:彼らは、ウィンドウのURLを変更することにより、あなたはダウンロードをトリガーすることを説明https://stackoverflow.com/a/20830337/3706559

。ダウンロードページには実際にテキストコンテンツがないのでダウンロードしただけで実際にダウンロードするユーザーは実際にはリダイレクトされません

0

私はそれがあなたが必要とするものであるかどうかわかりませんが、私は試してみます。

これは、ファイルtxtを作成するためのコードです。私はそれが必ずサーバーに保存されていると思う。

success: function(data) { 
    alert(data); 
     var a = $("<a>") 
     .prop("href", "root-of-your-newfile/newfile.txt") 
     .prop("download", "newfile.txt") 
     .appendTo("body"); 
     a[0].click(); 
     a.remove(); 
    } 

単に「成功」​​のajax呼び出しでは、ファイルcreateをダウンロードします。

0

質問は少し曖昧ですが、あなたの質問から私が理解していることに答えています。

はい、Ajaxを使用してファイルを取得することができます。コード(あなたはそれをサーバ側を使用している場合)は、PHPを使用してヘッダを渡すために

次のブラウザがそのよう

使用それを理解できるように、あなたはそれと一緒にいくつかのヘッダーを渡す必要があるファイルをダウンロードするには、ブラウザを作るために

ob_clean(); 
flush(); 
$file = "somefile.xlsx"; 
header('Content-Description: File Transfer'); 
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
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)); 
readfile($file); 

また、Ajaxの成功関数でjavaScriptを使用して同じヘッダーを渡すこともできます

関連する問題