我知道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