2012-04-15 13 views
3
$.ajax({ 
        type: "POST", 
        url: "processform.php", 
        dataType: "json", 
        data: {name: name, email: email, city: city, country: country, day: day, month: month, year: year} 
        }).done(function(msg){ 

         if(msg.success == 1){ 
          $("#success_msg").append('<p>'+msg.message+'</p>'); 
          window.location.href = './music/song.mp3'; 
         } 

        }); 

上記のコードは、音楽プレーヤーで新しいページを読み込むだけです。私はそれをファイルのようにダウンロードしたい。ajax呼び出し完了後にファイルをダウンロードし始めます。

答えて

3

あなたは正しいヘッダを持つと、そのページにリダイレクトよりもPHPファイルを作成し、そのファイルをダウンロードするには、ブラウザを強制する、PHP経由でそれを行うことができます。

<?php 
header('Content-disposition: attachment; filename=song.mp3'); 
header('Content-type: audio/mpeg3'); 
readfile('song.mp3'); 
?> 
+0

http_send_fileをpecl_httpから実行すると便利です - 範囲リクエストを有効にし、自動304(変更しない)レスポンスでhttp_match_etagを有効にします。 http://php.net/manual/en/function.http-send-file.phpおよびhttp://php.net/manual/en/function.http-match-etag.php – Olli

0

これはブラウザによって異なります。ブラウザにメディアプラグインがある場合、ダウンロードダイアログを表示する代わりに、メディアファイルをブラウザで直接開くことがあります。

3

は、この方法を実行しよう:

header("Content-Disposition: attachment; filename=somefile.mp3;"); 
+0

もちろん、これはサーバー側でPHPスクリプトを前提としています。 – Olli

+0

はい私はPHPを使用して – Adam

+0

私はこのコードを置くだろうか?私のprocessform.phpで? – Adam

1

あなたはAJAX呼び出しの後にダウンロードを自動化あきらめる場合は、 あなたがこれを行うことができます。ブラウザは、このような状況を独自の方法で処理します。

$.ajax({ 
       type: "POST", 
       url: "processform.php", 
       dataType: "json", 
       data: {name: name, email: email, city: city, country: country, day: day, month: month, year: year} 
       }).done(function(msg){ 

        if(msg.success == 1){ 
         $("#success_msg").append('<p>'+msg.message+'</p>'); 
         // window.location.href = './music/song.mp3'; 
         $('<a/>', {target:'_blank', href:'./music/song.mp3'}).appendTo($("#success_msg")).html('Click To Download <Filename>'); 
        } 

       });