新手问题 点击一下按钮,发送两次 Ajax 请求。求解释?

diguage · 2013年04月30日 · 最后由 lgn21st 回复于 2013年04月30日 · 12430 次阅读

在看《Agile Web Development with Rails》,边看边照着代码程序敲一遍。从开始到现在,虽然出了不少问题,但是,都慢慢解决了。

前两天,刚刚看到的第十一章第二节,Ajax 请求时,显示把字母打错了,(把 render 错写成 reader),一直运行不正常。后来改正后,Ajax 好使了,但是点击一次“AddtoCart”,购物车一下子多了两件商品。重启,刷新,各种折腾都不好使。

使用开发人员工具,查看了一下页面的网络连接,点击按钮,发送了两次 Ajax 请求。不知道到底怎么回事?

请熟悉 Rails 的朋友,帮忙看一下, 为啥发送两条请求?

源代码托管在 Github 上: https://github.com/diguage/depot

另外,由于我的错误判断,我把第三节的内容也看后,把代码也添加上了。

这里还有两篇文章: @Rei写的“Rails 3.2 的 Ajax 向导”, http://ruby-china.org/topics/2798

Assets 與 Ajax 應用程式, http://ihower.tw/rails3/assets-and-ajax.html

@yedingding 博文里看到@poshboytl 建的一个关于 Ruby/Rails 学习的群。根据我个人体验来说,群里大家都挺热心,也有好多人分享了一些自己做出来的好玩的东西。感兴趣的可以加一下: “Ruby/Rails 学习俱乐部”:231618869

另外,如果有问题,在群里聊过解决后,因为聊天信不能公开,其他人看不到。所以, 建议再整理成帖子,发到这里,方便有同样问题的人学习。

你能不能贴一下 Chrome 的 DevTools 里面 XHR monitor 的截图,我怀疑你说的两个 Ajax 请求其中第一个是 OPTIONS Request,或者你确认一下两个 Ajax 请求的 request/response 是否是重复的?如果重复的话,很可能你的 AddToChat 被重复绑定了两次 Ajax callback。

#1 楼 @lgn21st 我看了后台的日志文件,日志里面有两次相同的的请求。在页面上,显示商品数量的数字,数字变化,从 2 变成 3,然后瞬间变成 4。

在一个群里讨论,可能是因为编译过。然后,我删除 public/assets 下所有的文件后,重新刷新,然后点击按钮。这个问题消失了。

这是为啥?

#2 楼 @diguage 无法解释,不过问题解决了就好了,另外 development 环境一般是不需要编译 assets 的,部署的时候才需要在 production 环境下编译,如果代码本身没有问题,编译也不会产生这样的问题。

#2 楼 @diguage public/assets 下面有的话,会加载两次。会加载一个合并过的,一个没合并的,所以就两次 ajax。 production 不会出问题是因为配置 config.assets.compile = false,他不会再去看你的 app/assets

#3 楼 @lgn21st @yedingding 解释说“因为 app/assets/javascripts/application.js include 了 ublic/assets/application.js,而 public/assets/application.js 已经 include 了你在 app/assets/javascripts 里该 include 的东西。所以 double include”

感觉这个解释靠谱。

但是,我以前遇到过一个问题: 不编译,CSS 样式不生效,页面显示不正常。不知道这又是为啥? (我没有设置过运行模式。说实话,以前还不知道如何设置生产模式。哈哈)

一会儿来个朋友,今天没时间重现。我明天试试,看能否重现一下这个问题。

#4 楼 @ywencn 认为这个应该是正解了。

diguage 黄色渐变不生效。求解答。 提及了此话题。 04月03日 10:56
需要 登录 后方可回复, 如果你还没有账号请 注册新账号