2016-04-04 98 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"); 
});