2016-04-04 55 views
-1

我只是有一个关于jquery的总是功能的快速问题。jquery总是功能

目前在我的代码中,我有一个POST请求,所以我使用always函数使其等待,直到它完成,然后打印出响应。

ajax_send.always(function(){ 
    console.log(ajax_send); 
} 

我的问题是,如果我有一些代码,我希望被AFTER POST请求的成品运行,将它always之前运行完成后,如果我把它放在循环像这样外:

ajax_send.always(function(){ 
    console.log(ajax_send); 
} 
console.log("ajax done"); 

如果我总是会有always函数里面有东西在等待它。

我这样做是因为我会做一些POST请求,如果我必须保持它始终在它里面会显得非常难看,就像这样:

ajax_send.always(function(){ 
    console.log("1"); 
    ajax_send.always(function(){ 
     console.log("2"); 
     ajax_send.always(function(){ 
      console.log("3"); 
     } 
    } 
} 

如果我可以把之后只要我有always里面的东西它仍然运行之后的请求完成后,code'll看起来非常漂亮,像这样:

ajax_send.always(function(){ 
    console.log("1"); 
}  
ajax_send.always(function(){ 
    console.log("2"); 
}  
ajax_send.always(function(){ 
    console.log("3"); 
} 

编辑:我上面的代码缺少实际通话,但.always将始终在POST请求之后。

+0

如果将控制台外始终,前Ajax调用是将运行使... – epascarello

+0

我的意思是说,如果在'总是'之后,而不是在'总是'之前 – Rohinder

+0

是不是为此做的功能? – John

回答

0

always内部的代码将在特定的ajax调用完成后执行。您的阿贾克斯电话返回的顺序不能确定,所以这样做:

ajax_send.always(function(){ 
    console.log("1"); 
}  
ajax_send.always(function(){ 
    console.log("2"); 
}  
ajax_send.always(function(){ 
    console.log("3"); 
} 

将不总是保证打印出1,2,3。做到这一点的唯一方法是:

ajax_send.always(function(){ 
    console.log("1"); 
    ajax_send.always(function(){ 
     console.log("2"); 
     ajax_send.always(function(){ 
      console.log("3"); 
     } 
    } 
} 

这样做的原因是,ajax电话(顾名思义)是异步的。这意味着它们不会阻止代码的执行,而是可以在后台完成他们的工作。 always的目的是等待“背景”函数完成它正在做的事情,然后执行你想要的代码。这可以确保事物按您期望的顺序执行。

做类似的东西你所要求的,考虑使用jQuery的when()功能

+0

该死的。我希望它会这样做:(感谢您的帮助! – Rohinder

0

使用when()

var a = $.ajax(...), 
    b = $.ajax(...), 
    c = $.ajax(...); 

$.when(a, b, c).done(function() { 
    console.log("Ajax calls are done"); 
});