我想知道一些Ajax / jQuery大师在Ajax调用启动时如何考虑更新页面的方法,而不等待服务器返回响应。
例如,假设您正在开发像GMail这样的页面。当用户删除电子邮件时,您应该删除该DIV,LI,无论HTML元素从DOM中表示什么。一种方法是对服务器进行Ajax调用,等待服务器实际删除数据库中的数据,然后它可以返回一个JSON,包括要在DOM中删除的电子邮件的ID。然后,我们可以在Ajax请求的“success”方法中从DOM中删除此元素。
虽然这对我来说是最合乎逻辑且最干净的方式,但有时在服务器上进行处理可能需要一段时间。在这种情况下,即使点击服务器,我们也可以从DOM BEFORE中删除元素。对于用户来说,这看起来像是应用程序性能的显着提升。
虽然第二种方法在性能比效率更重要的情况下可能有用,但在预期响应不仅仅是删除客户端上的内容的其他情况下,这可能是不合需要的。一个例子可能是使用CSS类添加某种分层/嵌套元素。在服务器上生成这些内容更容易(因为我认为它应该已经可以作为ASP.NET MVC中的某种PartialView或其他技术中的等效项)。在客户端上构建这些标记可能会有点棘手,最终可能会陷入混乱。我知道有像jQuery tmpl()这样的方法可以促进这一点。但实际上我们复制了给定响应的布局:服务器上有一个版本,客户端上有一个版本。事情可能会失去同步,也会变得更难以测试。
只是想知道是否有人遇到过这样的情况。请分享您的想法和经验。
干杯, MOSH
答案 0 :(得分:2)
如果你想在得到回复之前立即隐藏div我认为只有当你指定一个错误函数被调用时它会很好,它将使用某种类型的错误信息重新显示div。
隐藏div,服务器返回错误,然后永远不会通知用户项目已被删除是个坏主意。
是否要删除元素或隐藏它取决于你,但无论如何,如果操作失败,我会实现一种重新显示它的方法。
答案 1 :(得分:1)
我认为这是实现用户接口操作的理想方式,只要您的错误处理是健壮的,并且如果服务器无法访问或返回错误,您可以将状态恢复到正确状态。只要您能够在操作失败时正确处理罕见情况,就绝对不需要让用户等待几乎总是成功的操作。
Optimize the experience for the 99% case, handle the 1% case intelligently if it happens.