我使用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功能解雇以及实际允许下载文件?
答案 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