ajaxComplete未被调用

3
我不明白为什么这个代码无法工作,我在stackoverflow上看了很多问题,但是没有找到我的代码有任何问题。
我有一个 #loading div,我希望在ajax调用完成时将其删除。这是我的代码,但 ajaxComplete 没有被调用。
我做错了什么?
 $(document).ajaxStart(function () {
        console.log("ajax start");
        $("#loading").show();
    });
    $(document).ajaxComplete(function () {
        console.log("ajax complete");
        $("#loading").remove();
    });

    $(document).ready(function () {


        $.ajax({
            type: 'GET',
            url: '@Url.Content("~/Service/listAllDevices")' + '?limit=' + 300 + '&offset=' + 10,
            dataType: 'json',
            async: 'false',
            global: true,
            success: function (listAllDevicesResponse) {
                console.log("ajax done");
                console.log(listAllDevicesResponse);
            }
        });

    });

你可能想在ajax完成时隐藏加载标签,而不是删除它。你的ajaxStart函数被调用了吗?你尝试过一些Console.log来查看方法是否被调用,但没有按照预期执行吗? - Shriike
1
所以你在控制台中没有看到 "ajax done" 吗?你应该添加 错误处理程序 并检查出了什么问题。 - Regent
Ajax done被触发了,我还添加了开始和完成的console.logs,但它们从未被触发。 - Lord Vermillion
@Shriike,你现在可以在代码中看到我的日志了,只有ajax完成并且我的对象被打印在控制台中。 - Lord Vermillion
你尝试过在 $(document).on("ajaxComplete", (){ $("#loading").remove(); }) 上吗? - Bowenac
@TobiasOlofsson 代码在fiddle中“原样”运行。 - Regent
2个回答

2

对于$.ajax对象,没有ajaxComplete事件处理程序,而是使用done或always。还有complete事件处理程序,但自jQuery 1.8以来已被弃用。

 $(document).ajaxStart(function () {
    console.log("ajax start");
    $("#loading").show();
});

$(document).ready(function () {

    $.ajax({
        type: 'GET',
        url: '@Url.Content("~/Service/listAllDevices")' + '?limit=' + 300 + '&offset=' + 10,
        dataType: 'json',
        async: 'false',
        global: true,
        success: function (listAllDevicesResponse) {
            console.log("ajax done");
            console.log(listAllDevicesResponse);
        },
        always: function() {
          console.log("ajax complete");
          $("#loading").remove();            
        }
    });

});

你可以在这里了解更多关于jQuery $.ajax的内容。 点击这里

我在 jQuery 的文档中没有看到任何关于它被弃用的内容。你能提供一个参考吗? - Barmar
我认为这是正确的,我之前遇到过这个问题。成功、完成和错误。 - Bowenac
弃用通知:自jQuery 1.8起,jqXHR.success()、jqXHR.error()和jqXHR.complete()回调已被弃用。为了准备将来删除它们的代码,请改用jqXHR.done()、jqXHR.fail()和jqXHR.always()。该文本可以在我提供的链接中找到。 - Teo
2
我不同意你的答案,他确实可以使用AjaxComplete,参考:http://api.jquery.com/ajaxcomplete/ - Heberda

0

我不太确定为什么你的完整函数没有被调用,但我建议使用stop。ajaxComplete在每个单独的ajax请求完成时都会被调用。ajaxStop在所有请求都完成时被调用。像这样:

$(document).ajaxStart(function () {
    console.log("ajax start");
    $("#loading").show();
});

$(document).ajaxStop(function () {
    console.log("ajax complete");
    $("#loading").hide();
});

参考资料:

https://api.jquery.com/ajaxStart/

https://api.jquery.com/ajaxStop/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接