2012-11-02 42 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善良都会消失。这可能有一百个很好的理由,所有与安全有关的。