Javascript:处理服务器尚未分配id的客户端初始化对象
javascript: handling client side initiated objects that the server hasn't assigned an id to
我正在开发一个javascript应用程序,我试图使服务器端同步尽可能自动和不引人注目
我面临的问题是,当创建一个对象客户端我可以立即发送创建ajax请求,而我在等待它返回添加对象到ui在必要的地方
然而,因为对象在服务器响应之前没有id,所以我不能对其执行任何更新或销毁操作,直到服务器响应并更新其id
处理这个问题的最好方法是什么?一些有帮助的代码:
create_object = function() {
return {
save: function() {
if (this.isNew()) {
this.create();
} else {
this.update();
}
},
isNew: function() {
return (this.id === undefined || this.id === null);
},
update: function () {
$.ajax({
url: '/update_object/'+this.id+'.json',
type: 'post',
dataType: 'json',
data: this
});
},
create: function () {
var object = this;
$.ajax({
url: '/create_object',
type: 'post',
dataType: 'json',
data: this,
success: function(data) {
object.id = data.id;
}
});
},
destory: function () {
$.ajax({
url: '/destroy_object/'+this.id+'.json',
type: 'get',
dataType: 'json'
});
}
};
};
var object = create_object();
object.message = "Foo!";
object.save();
// this will create a new object until object.save has responded
object.message = "Bar!";
object.save();
// this wont work until object.save has responded
object.destroy();
这不是一个真正的问题。AJAX本质上是异步的(异步 Javascript和XML)。您必须等到从服务器获得响应后才能更新UI。
如果你必须立即更新UI,你可以创建一个带有占位符ID的元素,然后在服务器响应后用实际的ID更新。
这是对你的评论的回应。web应用程序不是纯粹的客户端应用程序。它们适合客户机-服务器范式。您可以尝试使用同步post,但这样做的副作用是在服务器响应之前占用浏览器(这是由于Javascript是单线程的事实)。
也就是说,服务器的响应应该非常快,除非你的网络很慢,或者你发送到服务器的任何帖子都会导致一些计算密集型的操作。
走占位符路线会(正如你已经意识到的)导致你必须处理各种各样的新问题。你必须确保它们是唯一的。现在,如果他们在服务器使用id响应之前对客户端元素执行某些操作怎么办?服务器将不知道占位符id的含义。有一些方法可以解决这个问题(排队请求是一种方法),但这会使您的代码变得更加复杂。我不认为仅仅为了让UI更新更快而做出这样的权衡是值得的。
一个选项是提供一些视觉反馈给用户,应用程序正在"工作"(即,当你正在等待服务器的响应)。例如,旋转器
至于堆叠AJAX请求,这是使用jQuery消息队列插件可以采用的一种方法。
- 如何从Url客户端获取Id
- Instagram客户端ID是否特定于每个使用它的人
- Socket.IO socket.id 更改同一客户端而不重新连接
- 在代码隐藏 (asp.net VB) 中返回“完整”客户端 ID
- 将客户端 ID 从 GridView 中传递给 JavaScript 函数
- 如何访问相关的客户端ID
- 无法访问字段'通过aspx页面上的javascript函数传递来自代码隐藏中函数调用的客户端id的s值(页面加载
- 正在获取Gridview中文本框的客户端ID
- 正在获取javascript中的客户端ID
- 如何获取谷歌分析客户端ID
- 隐藏内容空间 ID 和访问令牌,客户端 JavaScript 文件
- 为客户端和服务器上的对象生成唯一 ID
- 如何通过 JavaScript 发送 asp.net 控件的客户端 ID
- Socket.io:随时获取客户端会话 ID
- websockets - 检测具有相同ID的多个客户端并“踢”它们
- 如何使用 javascript 从客户端获取 C# 时区信息类的客户端时区 ID
- 通过锚标记将另一个控件的客户端 ID 发送到 JavaScript
- 通过客户端 ID 命名 JS 函数
- 跨多个客户端和服务器生成真正的全局唯一 ID
- 如何在 Orbeon Forms 中的客户端 javascript 中获取元素 ID