1
回答
关于ajax异步请求因缓存导致数据错乱的问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

后台环境:jfinal2.2

前台环境:左侧导航菜单,右侧main div的内容通过点击左侧菜单用ajax异步加载。采用浏览器cookie记录跟踪登录用户。ajax采用jquery的$.ajax方式,参数:type: "POST",async: false,cache: false,contentType: "application/x-www-form-urlencoded; charset=UTF-8"。

问题:使用chrome用a用户登录系统,点击“用户列表菜单”,后台对应的controller能接收到正常的请求,结果一切正常。同时在firefox中使用b用户登录系统,点击“用户列表菜单”,一切正常。但是,如果这时在chrome中再次点击“用户列表菜单”,后台对应的controller就不能接收到a用户的请求,但是chrome却接收到了b用户在firefox查询的结果,导致两个用户的数据混乱。

想法:搜索了ajax缓存相关的问题,有说使用post再加上cache:false就可以了,但是还是不行,是不是必须在url后面加上时间戳参数或随机数才行呢?有的说使用jquery的ajax,如果加了cache:false,url后会默认加时间戳参数的?

举报
Jekey
发帖于1年前 1回/583阅
共有1个答案 最后回答: 1年前

    很明显你是用了  xxx.dao.set()、xxx.dao.save()、xxx.dao.update()、xxx.dao.put() 这样的方法,这个在 jfinal 手册中有红色字体说明:model中的dao只能用于 find、query 不能用于承载数据。

    jfinal 后续会出更好的 demo,将完全去除 model 中的 dao 对象,改而在业务层创建 dao 对象。

--- 共有 2 条评论 ---
JFinal回复 @JKnife : 放到业务层中就很好,不用单独再建立dao层了 1年前 回复
JKnife为了跟dubbo配合使用,我们在实际用的时候也做了类似改造,把model作为一个专门承载数据的对象,数据库操作的方法拉到了独立的dao中,传统一点但是很好用。 1年前 回复
顶部