当目标是可下载文件时,Ajax函数在href时不会触发类

时间:2016-03-12 19:39:43

标签: javascript jquery ajax

我使用AJAX将下载次数记录到我的数据库来激活php函数但是我遇到的问题是我的函数没有触发任何包含可下载mp3的href的类文件。

示例链接:

<a class="pod-download" href="https://example.com/file-772325/download" data-id="772325">DOWNLOAD</a>

这是AJAX:

jQuery(document).on('click', "a.pod-download", function(event) {

    var trackID = jQuery(this).attr('data-id');

    var data = {
            'action': 'addDownloadCount',
                'security': jQuery( '#crate-nonce' ).val(),
                'trackID' : trackID
               };

    var $this = jQuery(this);

    jQuery.post(myCrate.ajaxurl, data, function(response) {

        $this.closest('.podwrap').find('.ps-downloads').html(response);

    });

});

如果我使用preventDefault:

,则AJAX功能可以正常工作
jQuery(document).on('click', "a.pod-download", function(event) {

    event.preventDefault();

    var trackID = jQuery(this).attr('data-id');

    var data = {
            'action': 'addDownloadCount',
                'security': jQuery( '#crate-nonce' ).val(),
                'trackID' : trackID
               };

    var $this = jQuery(this);

    jQuery.post(myCrate.ajaxurl, data, function(response) {

        $this.closest('.podwrap').find('.ps-downloads').html(response);

    });

});

但是文件显然没有下载。

所以我的问题是如何让AJAX功能解雇以及实际允许下载文件?

2 个答案:

答案 0 :(得分:1)

实际上扩展了@nlgn的回答我提出了以下内容,如果其他人试图这样做,那就更好了。

我将a href更改为span并将下载url添加为数据ref:

<span class="pod-download" data-url="https://example.com/file-772325/download" data-id="772325">DOWNLOAD</span>

然后在脚本中而不是使用window.open,我们使用window.location.href来防止弹出恼人的空白窗口:

jQuery(document).on('click', ".pod-download", function(event) {

    event.preventDefault();

    var trackID = jQuery(this).attr('data-id');
    var url = jQuery(this).attr('data-url');

    window.location.href = url;

    var data = {
                'action': 'addDownloadCount',
                'security': jQuery( '#crate-nonce' ).val(),
                'trackID' : trackID
               };

    var $this = jQuery(this);

    jQuery.post(myCrate.ajaxurl, data, function(response) {

        $this.closest('.podwrap').find('.ps-downloads').html(response);

    });

});

像魅力一样,非常干净。

答案 1 :(得分:0)

TRY:

<a class="pod-download" href="https://example.com/file-772325/download" data-id="772325" target="_blank">DOWNLOAD</a> 

OR:

在event.preventDefault();

之后添加以下内容
window.open( mp3_download_url, 'mp3');

为避免您刷新页面并允许执行AJAX POST