我正在Django开发一个问题跟踪应用程序,主要用于学习练习,也适用于我自己的项目 - 我正在研究使用一些AJAX来增强可用性.例如,允许用户"加注"特定问题,这会将其添加到监视列表中.这是在很多站点中实现的,并且通常是AJAX - 因为用户正在查看的URL在单击星标时不需要更改.
现在,我想知道从我的star_unstar
观点返回什么样的响应- 检测是否通过AJAX发出请求.
目前,如果请求是一个AJAX请求,它只返回星号所需的HTML部分,因此我可以替换星号父DIV中的HTML,以便星号显示为"on"或"off",取决于用户的操作.
但是,我更愿意返回某种JSON对象,因为它看起来更"合适",我想.这个方法的问题是javascript必须修改星形图像的src
属性,href
它上面和链接标题,这对于这样一个简单的功能似乎很多工作.我也在考虑将来的在线评论,但我想了解在开始编写大量JS之前应该如何"完成".
在实现这样的功能时,普遍的共识是什么,不仅仅是Django,还有所有以类似方式运行的框架?
当我使用Ajax时,我主要关心的是限制我必须发送的数据量.这种类型的Ajax应用程序应该非常敏感(如果可能,则不可见).
在切换星形的情况下,我会将实际的开/关状态创建为CSS类,StarOn和StarOff.当客户第一次访问页面时,客户端将下载off和on星,考虑到星形是一个小图像,这是可以接受的.如果您想在将来更改星形外观,您将只编辑CSS,而根本不需要触摸javascript.
至于Ajax,我会来回发送一件事 - 一个JSON变量true/false,表示请求是否成功.一旦用户点击星号,我就会将其更改为StarOn状态并发出请求.99%的时间Ajax将返回true
,用户甚至不会意识到Web请求中存在某种延迟.在极少数情况下你需要false
返回,你必须将星形还原为StarOff并向用户显示错误消息.