0

当前单击我的应用程序中的链接之一会触发 AJAX 调用 (GET),如果成功,则会触发第二个,如果成功,则第二个会调用第三个。

这样,当单击链接当前正在进行时,可以通知用户进程的哪一部分已启动。

因此,在 Django 项目的模板文件中,单击回调正文中提到的链接,如下所示:

$("#the-link").click(function(item)) {
    // CALL 1
    $.ajax({
        url: {% url ajax_call_1 %},
        data: {
            // something
        }
    })
    .done(function(call1Result) {

        // CALL 2
        $.ajax({
            url: {% url ajax_call_1 %},
            data: {
                // call1Result passed here to CALL 2
            }
        })
        .done(function(call2Result) {

            // CALL 3
            $.ajax({
                url: {%url ajax_call_3 %},
                data: {
                    // call2Result passed here to CALL 3
                }
            })
            .done(function(call3Result) { // expected result if everything went fine
                console.log("wow, it worked!");
                console.log(call3Result);
            })
            .fail(function(errorObject) {
                console.log("call3 failed");
                console.log(errorObject);
            }
        })
        .fail(function(errorObject)) {
            console.log("call2 failed");
            console.log(errorObject);
        }
    })
    .fail(function(errorObject) {
        console.log("call1 failed");
        console.log(errorObject);
    });
});

这对我来说很好。问题是,如果用户关闭浏览器并且调用未完成(因为完成所有三个调用需要一些时间),我想防止中断以下调用,因为 Django 视图函数中有一些额外的逻辑称为在每个 GET 请求中。

例如,如果用户在 CALL 1 期间单击链接并关闭浏览器,是否有可能以某种方式继续执行以下 CALL 2 和 CALL 3?

我知道通常我可以使用 Celery Task 来处理该功能,但是在这里提到的链式调用仍然可以吗?

任何帮助深表感谢!

4

1 回答 1

1

不,整个 Javascript 环境是由窗口定义的,当窗口关闭时,所有 Javascript 的优点都消失了。这可能有一百个很好的理由,所有这些都与安全相关。

于 2012-11-02T22:58:45.993 回答