AJAX调用不起作用,因为它继续转到链接

AJAX call is not working because it proceeds to go to the link

本文关键字:继续 链接 因为 调用 不起作用 AJAX      更新时间:2023-12-07

我有一个从数据库动态生成的PDF链接列表。我想要一个日志来跟踪下载每一个的用户。

它似乎不起作用,因为点击链接后,在重定向之前没有时间执行ajax

这是javascript:

function insertlog(linkName)
{
    $.post( "insertlog.php", { linkName: linkName, user: "<?=$username?>" } );
}

这是链接:

 <a href="http://www.test.com/media/pdf/test.pdf" onclick="insertlog('test.pdf')">test.pdf</a>

试试这个:

<script>                    
function logAndGo(target)
{
    $.post( "insertlog.php", { linkName: target, user: "<?=$username?>" } )
        .then(function(url) {
            window.location = url;
        });
}
</script>

让服务器返回正确的URL作为对日志POST的响应。然后将链接更改为:

<a href="#" onclick="insertlog('test.pdf')">test.pdf</a>

一个更好的选择是@dave提出的:创建一个处理重定向的服务器端页面,这样你就可以做一些类似的事情:

<a href="getFile.php?id=1234">test.pdf</a>

通过在服务器端处理它,您对日志记录、重定向到哪个URL等有了更多的控制

我认为,对于您想要做的事情,最好的解决方案是不要链接到pdf,而是直接链接到您的ajax脚本调用的站点,并将实际请求的源作为参数传递。

在脚本中,您可以进行日志记录并重定向到实际源(或者让脚本只返回实际源)。

这也允许您跟踪阻止Javascript的用户。而且它不需要两个请求。并且不需要维护不必要的Javascript代码。

$.post callback中重定向。

<script>                    
function logAndGo(target)
{
    $.post( "insertlog.php", { linkName: target, user: "<?=$username?>" }, fucntion(){
            window.location = 'http://www.test.com/media/pdf/' + target;
          });
}
</script>

感谢大家的帮助。我接受了内特的建议,这是最终的解决方案:

function insertlog(linkName)
{
$.post( "insertlog.php", { linkName: linkName, user: "<?=$username?>" }, 
   function(linkName) {
        window.location = "http://www.test.com/media/pdf/"+linkName;
    });
}

然后在我的insertlog.php的末尾添加了一个带有PDF文件名的echo。

我的链接如下:

 <a onclick="insertlog('1104.pdf')" href="#">1104.pdf</a>