2012-04-13 26 views
4

ユーザーがAJAXを介して送信された電子メール確認フォームを記入した後、AJAXコールの応答があれば、現在のブラウザウィンドウで強制的にダウンロードを開始したい成功です。 "download_email_button" 一度JS/jQueryのは、次のようになりますクリックするAjaxの成功時に.mp3または.zipファイルを強制的にダウンロードする

<form id="form_download_email" method="POST" action="music_email_verification.php"> 
    <input id="download_email" type="text" tabindex="1" /> <br/> 
    <a href="javascript:void(0);" id="download_email_button"> 
     Download! 
    </a> 
</form> 

:よう

電子メールの確認フォームが見えます

$("#download_email_button").click(function() { 

    var action = $("#form_download_email").attr('action'); 
    var form_data = {email: $("#download_email").val()}; 

    $.ajax({ 
     type: "POST", 
     url: action, 
     data: form_data, 
     success: function(response){ 
      if(response == 'success'){  
       window.location.assign('URL to .mp3 or ZIP'); 
      } 
     } 
    }); 
}); 

応答を== '成功' のブロックが入力されます今のところ、私が見つけた唯一の解決策は、ポップアップウインドウ(window.open - これはChromeによってブロックされる)を起動せずにファイルを強制的にダウンロードすることです。上記のようにwindow.location.assignを使用することです。これは、JSを介してファイルを強制的にダウンロードするという正しい方法ですか?

しかし、window.location.assignメソッドを使用すると、1つのファイルしかダウンロードできません。また、2つのmp3で2つの行を挿入しようとすると、動作しません。 AKA:私は、ユーザーが.MP3/.zipファイルをダウンロードする必要がフォームを送信した後、別のリンクをクリックする必要がありますする必要はありません

window.location.assign('http://song1.mp3'); 
window.location.assign('http://song2.mp3'); 

、私はJS/jQueryの中でそれをすべて行うために試してみたいです。

最後の方法は、hrefがmp3を指し示していたドキュメント上の2つの隠れたタグをブラウザがクリックするように応答== '成功'でした。ただし、jcleryのonclick属性だけでは、「クリックのたびにリンクのデフォルトアクションをトリガーできないという問題があるようです。

jsでこれを行う必要がありますか?これを行う方法がない場合、私はPHPのようなものを試すべきですか?

現在のやり方に関する提案や、複数のmp3ファイルをダウンロードする方法のアドバイスが参考になります。

+0

オープンおそらくダウンロードに新しいタブにはiframeのソースを設定するには、URLごとのiframeを作成しますか? –

答えて

3

は、ダウンロードしたファイルのURL :)

var 
    urls = ['url_1.mp3', 'url_2.mp3', /* ... , */ 'url_N.mp3'], 

    doLoad = function(url){ 
     $("<iframe />") 
      .css("display", "none") 
      .bind("load", function(e){ 
       this.src == url && $(this).remove(); 
      }) 
      .attr("src", url) 
      .appendTo($(document.body)); 
    }; 

for(var i=0; i < urls.length; i++) { 
    doLoad(urls[i]); 
} 
+0

これは、URLとして1つ以上の.zipを投げた場合でも同様に動作しますか? – Alex

+1

@alex:そうだと思います:) zipファイルとは逆に、ブラウザがディスクに保存する代わりにそれらを再生しようとすると、mp3ファイルに問題が発生する可能性があります。 –

関連する問題