我知道Ajax的本質是異步的,因此我的代碼是錯誤的。 但我需要幫助才能找到另一種解決方案。如何使AJAX同步
案例是:我將數據插入我的數據庫:
self.insertTextItem = function (item) {
console.log("Insert TextItem with Service");
return $.ajax({
type: "POST",
url: serviceRoot + "InsertTextbatchTagItem",
beforeSend: serviceFramework.setModuleHeaders,
data: item,
cache: false
});
};
item.Id = null; // Id is autocreated in db.
item.Text = "Finally Friday!";
self.insertTextItem(item)
.done(function (newtext) {
item.textbatchId = newtext.Id;
}
//continuous code…
這在大多數情況下找到。 異常是我需要從數據庫中立即返回的數據。 但是我需要「連續代碼」來等待Id被返回。 顯而易見的解決方案是將「連續代碼」放入回調函數中,但實際上,我在一個函數中調用self.insertTextItem,因此調用函數無需等待即可返回。 (顯然回調函數在調用函數中結束。)
如何在這種情況下重寫self.insertTextItem函數?
在'done()'回調中實現連續代碼。 – 2014-10-03 08:56:23
@Asle使ajax同步可以掛起你的應用程序。如果你希望數據在ajax調用完成時可用嘗試使用回調函數 – 2014-10-03 08:58:51
通常的解決方案是禁用ui,可能會顯示帶覆蓋的ajax微調, - 在ajax回調中啓用。同步ajax鎖定用戶界面,並造成不愉快的體驗 – andrew 2014-10-03 08:59:11