異步函數按照外觀順序觸發,但按照完成時的順序返回。對於那些簡單的text
和removeClass
方法,返回速度比您使用Server
對象時要緩慢得多,但我認爲這是可能的。如果你需要在postService
之前發生前兩行,你可以試試jQuery的deferred.promise
。 Here's a fiddle展示的潛力,一些代碼來檢查:
function firstThing(){
var dfd = new jQuery.Deferred();
$('#import').text("Importing...");
$('#import img').removeClass("hidden");
dfd.resolve();
}
$.when(firstThing()).then(
function() {
Server.postService("tests", row_datas, function(data) {
// some stuff here
});
}
)
作爲一個側面說明,你的代碼的邏輯是有問題的,通過設置的#import
的text
,無論img
有hidden
類不會在那裏現在,但這可能就在這一點上。
更新
關注你的迴應我的評論詢問你使用Ajax,我建議你閱讀有關async
option,看看你是如何做的可能會或可能不會被阻塞事件是什麼。
我也建議閱讀jQuery ajax回調,特別是error
,success
和complete
(現在使用jQuery 1.8+,fail
,done
和always
)。
有沒有機會在'Server'「stuff」中使用ajax? – crowjonah
你是怎麼調用這段代碼的? – epascarello
在像http://jsfiddle.net這樣的地方提供演示確實有助於深入研究這個問題。我猜猜Server.postService()是服務器端方法嗎?瀏覽器實際上在源代碼中獲得了什麼? –