AJAX与Django(或任何Web框架)的"最佳实践"是什么?

Rob*_*ing 10 django ajax

我正在Django开发一个问题跟踪应用程序,主要用于学习练习,也适用于我自己的项目 - 我正在研究使用一些AJAX来增强可用性.例如,允许用户"加注"特定问题,这会将其添加到监视列表中.这是在很多站点中实现的,并且通常是AJAX - 因为用户正在查看的URL在单击星标时不需要更改.

现在,我想知道从我的star_unstar观点返回什么样的响应- 检测是否通过AJAX发出请求.

目前,如果请求是一个AJAX请求,它只返回星号所需的HTML部分,因此我可以替换星号父DIV中的HTML,以便星号显示为"on"或"off",取决于用户的操作.

但是,我更愿意返回某种JSON对象,因为它看起来更"合适",我想.这个方法的问题是javascript必须修改星形图像的src属性,href它上面和链接标题,这对于这样一个简单的功能似乎很多工作.我也在考虑将来的在线评论,但我想了解在开始编写大量JS之前应该如何"完成".

在实现这样的功能时,普遍的共识是什么,不仅仅是Django,还有所有以类似方式运行的框架?

Kai*_*Kai 7

当我使用Ajax时,我主要关心的是限制我必须发送的数据量.这种类型的Ajax应用程序应该非常敏感(如果可能,则不可见).

在切换星形的情况下,我会将实际的开/关状态创建为CSS类,StarOn和StarOff.当客户第一次访问页面时,客户端将下载off和on星,考虑到星形是一个小图像,这是可以接受的.如果您想在将来更改星形外观,您将只编辑CSS,而根本不需要触摸javascript.

至于Ajax,我会来回发送一件事 - 一个JSON变量true/false,表示请求是否成功.一旦用户点击星号,我就会将其更改为StarOn状态并发出请求.99%的时间Ajax将返回true,用户甚至不会意识到Web请求中存在某种延迟.在极少数情况下你需要false返回,你必须将星形还原为StarOff并向用户显示错误消息.


And*_*ume 5

正如您在最后指出的那样,我认为您的问题与 Django 或 Python 无关。

是否返回一团 HTML 以写入 DOM 或将一些序列化数据作为 JSON 返回,这有很多个人偏好。不过,您可能需要考虑一些实际因素。

HTML 的优点: - 直接写入页面简单快捷。

JSON 的优点: - 不耦合到应用程序的前端。如果您在应用程序的任何其他地方需要该功能,它随时可用。

我的呼吁。更新的 HTML 数量相对较少,在这种情况下,我可能会返回 JSON,并为自己提供额外的灵活性,这在未来可能会有用。