2012-11-02 41 views
0

當前點擊我的應用程序中的鏈接之一,觸發AJAX調用(GET) - 如果成功 - 觸發第二個和第二個 - 如果成功 - 調用第三個。jQuery AJAX鏈接調用+芹菜在Django

通過這種方式,用戶可以獲知單擊鏈接時當前正在進行哪部分流程。

所以在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); 
    }); 
}); 

這對我工作得很好。事情是,我想防止打斷以下電話如果用戶關閉瀏覽器和調用沒有完成(因爲這將需要一些時間來完成所有三個),因爲有一些額外的邏輯在在每個GET請求中調用Django視圖函數。

例如,如果用戶在CALL 1期間點擊鏈接並關閉瀏覽器,是否有可能以某種方式繼續進行以下CALL 2和CALL 3?

我知道通常我可以使用芹菜任務來處理函數,但在這裏提到的鏈式調用仍然可以嗎?

任何幫助非常感謝!

+0

如果可能的話,這將是DoS攻擊的一大特性 –

回答

1

不可以。整個Javascript環境由窗口定義,當窗口關閉時,所有的Javascript善良都會消失。這可能有一百個很好的理由,所有與安全有關的。