4

ユーザーが電子メール確認フォーム(AJAX経由で送信されます)に入力した後、AJAX呼び出し応答が成功した場合、現在のブラウザーウィンドウでダウンロードを強制的に開始したいと思います。

メール確認フォームは次のようになります。

<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」をクリックすると、js/jqueryは次のようになります。

$("#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');
            }
        }
    });
});

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

ただし、window.location.assignメソッドを使用すると、ダウンロードできるファイルは1つだけであり、2つのmp3で2行に入力しようとすると、機能しません。AKA:

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

.mp3 / .zipをダウンロードするためにフォームを送信した後、ユーザーが別のリンクをクリックする必要はありません。すべてJS/jQueryで実行してみたいと思います。

私が考えた最後の方法は、response =='success'で、ブラウザに、mp3を指すhrefを持つドキュメント上の2つの非表示のタグをクリックさせることでした。ただし、「問題は、クリックを介してリンクのデフォルトのアクションをトリガーできないことです」と思われます。jqueryでは、onclick属性だけです。

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

私がそれを行う現在の方法に関する提案や、複数のmp3ファイルをダウンロードする方法に関する推奨事項は役に立ちます!

4

1 に答える 1

3

ダウンロードするURLごとにiframeを作成し、iframeのソースをファイル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] );
}
于 2012-04-14T01:43:04.387 に答える