javascript - jquery:如何等到ajax调用完成

标签 javascript jquery ajax

我的页面上有一个指向其他网站的 anchor 。

我想跟踪点击那个 anchor ,所以我写了一个小的点击处理程序。

<a href="https://othersite.com" class="js-button">Leave</a>

还有javascript代码...

$(".js-button").on("click", function() {
    var name = $(this).data("name");
    $.when(
        $.ajax({
            url : 'statscript.php',
            type : 'post',
            data : 'name=' + name,
            success : function(response) {                  
            }
        })
    ).then(); 
});

虽然它应该等待 ajax 加载,然后才离开页面,但实际上它不起作用。 statscript.php 甚至没有开始工作,用户离开了页面。

所以如果我用 then 将字符串更改为

).then(alert('hey'); 

php 脚本工作正常,因为它看起来有时间工作。

那么我在 wait 函数上做错了什么?

最佳答案

最接近您的代码的解决方案是:

您应该使用 e.preventDefault() 来阻止 a 标签的默认操作。

您还应该在完成 时重定向用户。如果您的分析系统出现错误,他不需要知道。

你应该这样做:

$(".js-button").on("click", function(e) {
    e.preventDefault();

    var name = $(this).data("name"),
        href = $(this).attr("href");

    $.ajax({
        url : 'statscript.php',
        type : 'post',
        data : 'name=' + name,
        complete: function () {
            alert('Hey!');
            // if you want to redirect the user after the statistics sent:
            //window.location.href = href;
        }
    })
});

关于javascript - jquery:如何等到ajax调用完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23054712/

相关文章:

javascript - 使用数组搜索元素的数据属性并将其隐藏

javascript - toggle() 用不同的元素隐藏/显示

javascript - AJAX Jquery 调用返回 401(未经授权)- API 调用

javascript - 如何在 JavaScript 中检查符号如 ☑?

javascript - 我可以同时使用 dojotype 和 onServerClick 吗?

javascript - Jquery Unobtrusive 验证不适用于 View 模型列表中第一个之后的项目 - c# MVC 4

javascript - 如何将属性添加到文本区域内的链接?

jquery - 如何在单个帖子中多次使用此代码?

php - 使用 AJAX 插入后,HTML 内容不应用 CSS

ajax - API Controller Post 方法返回类型/值