2016-11-06 14 views
1

は私のコードです:JSがtxtファイルをダウンロードするのではなく、なぜ開くのですか?ここ

サーバーサイド:

public function export(){ 
    $arr = array(); 
    if($_POST["type"] == "save"){ 
     $name = "export.txt"; 
     file_put_contents("$name",$_POST["text"]); 
     $arr["type"] = "link"; 
     $arr["url"] = "http://localhost:8000/{$name}"; 
    } 
    return $arr; 
} 

クライアント側:私は#export(ボタン)をクリックすると

$(document).on('click', '#export', function() { 
    var names = ["سعید خرمی", "فرید هادوی"]; 
    var namess = names.join('\n'); 
    $.ajax({ 
     type: "post", 
     url: "/export", 
     headers: { 
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
     }, 
     data: { 
      type: "save", 
      text: namess 
     }, 
     dataType: "json", 
     success: function(data){ 
      var href = data.url; 
      window.location = href; 
     } 
    }); 
}) 

、その.txtを開きますファイル(ダウンロードする代わりに)。このような何か:

enter image description here

は、私はまた、それは他のブラウザでは動作しません。..クロムを使用することを指摘しました。

.txtファイルをダウンロードするにはどうすればよいですか?

+1

あなたがPHPを使用して、力のダウンロードヘッダを送信する必要があります。ファイルのURLに直接リダイレクトし、ブラウザが表示するファイルタイプをサポートしている場合は、ダウンロードする代わりに出力を表示します。 –

+0

ブラウザに表示されるすべてのものがダウンロードされました。 – nnnnnn

+0

@nnnnnnしかし、私は '.txt'ファイルを取得する必要があります.. – stack

答えて

2

success: function(data){ 
var href = download.php?filename=export.txt; 
window.location = href; 
} 

そして、あなたのdownload.phpに、このようなあなたの成功の一部を変更し

は($fileと言う)filename GET変数からファイル名を取得します。

ヘッダを送信する:

<?php 
$file = $_GET['filename']; // get the filename 
if (file_exists($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: text/plain'); // the appropriate header type for txt file 
    header('Content-Disposition: attachment; filename="'.basename($file).'"'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    readfile($file); 
    exit; 
} 
?> 

出典:PHP Readfile Documentation

+0

私のPHP関数が何かを返す必要はありませんか? – stack

+0

また、 '$ file'には何が入っていますか?あなたは完全なコードを書いてもよろしいですか? – stack

+0

$ファイルには、Ajax経由で送信するファイル名が入ります。答えで更新されました。 –

関連する問題