0

現在、アプリケーションのリンクの 1 つをクリックすると、AJAX 呼び出し (GET) がトリガーされ、成功した場合は 2 番目のリンクがトリガーされ、2 番目のリンクが成功した場合は 3 番目のリンクが呼び出されます。

このようにして、現在進行中のリンクをクリックしたときにプロセスのどの部分が開始されたかをユーザーに通知できます。

したがって、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);
    });
});

これは私にとってはうまくいきます。問題は、ユーザーがブラウザーを閉じて呼び出しが終了していない場合 (3 つすべてを終了するのに時間がかかるため) 、次の呼び出しが中断されないようにしたいということです。各GETリクエストで。

たとえば、CALL 1 の実行中にユーザーがリンクをクリックしてブラウザを閉じた場合、次の CALL 2 と CALL 3 をどうにか続行できますか?

通常、Celery Task を使用して関数を処理できることはわかっていますが、言及されている連鎖呼び出しでここでも可能ですか?

どんな助けでも大歓迎です!

4

1 に答える 1

1

いいえ。Javascript 環境全体はウィンドウによって定義されます。ウィンドウを閉じると、Javascript の利点はすべて失われます。これにはおそらく 100 の正当な理由があり、そのすべてがセキュリティ関連です。

于 2012-11-02T22:58:45.993 に答える