我正在Django开发一个问题跟踪应用程序,主要用于学习练习,也适用于我自己的项目 - 我正在研究使用一些AJAX来增强“可用性”。例如,允许用户“加注”特定问题,这会将其添加到监视列表中。这是在很多站点中实现的,通常是AJAX - 因为用户查看的URL在点击星标时不需要更改。
现在,我想知道从star_unstar
视图返回什么样的响应 - 检测是否通过AJAX发出请求。
目前,如果请求是一个AJAX请求,它只返回星号所需的HTML部分,因此我可以替换星号父DIV中的HTML,以便星号出现在“on”或“关闭“,取决于用户的行为。
但是,我更愿意返回某种JSON对象,因为它看起来更“合适”,我想。这种方法的问题在于,javascript必须修改星形图像的src
属性,其上的href
以及链接标题,这对于这样一个简单的功能来说似乎很有用。我也在考虑将来的在线评论,但我想了解在开始编写大量JS之前应该如何“完成”。
在实现这样的功能时,普遍的共识是什么,不仅仅是Django,还有所有以类似方式运行的框架?
答案 0 :(得分:7)
当我使用Ajax时,我主要关心的是限制我必须发送的数据量。这种类型的Ajax应用程序应该非常敏感(如果可能,则不可见)。
在切换星形的情况下,我会将实际的开/关状态创建为CSS类,StarOn和StarOff。当客户第一次访问页面时,客户端将下载off和on星,考虑到星形是一个小图像,这是可以接受的。如果您想在将来更改星形外观,您将只编辑CSS,而不必触及javascript。
至于Ajax,我会来回发送一件事 - 一个JSON变量true / false,表示请求是否成功。一旦用户点击星号,我就会将其更改为StarOn状态并发出请求。 99%的时间Ajax将返回true
,用户甚至不会意识到Web请求中存在某种延迟。在极少数情况下,您需要返回false
,您必须将星标还原为StarOff,并向用户显示错误消息。
答案 1 :(得分:4)
我不认为你的问题特别与Django或Python有关,正如你在最后指出的那样。
对于是否返回一大堆HTML来写入DOM或某些序列化数据作为JSON,有很多个人偏好。但是,您可能需要考虑一些实际因素。
HTML的优点: - 轻松快速地直接写入页面。
JSON的优点: - 未连接到应用程序的前端。如果您在应用程序的任何其他位置都需要该功能,那么就可以随时使用了。
我的电话。这只是一个相对微不足道的HTML更新,我可能会在这种情况下返回JSON并给自己提供额外的灵活性,可能会有所帮助。