Rails 进行 ajax 操作时页面不刷新

tank_lei · 2013年01月07日 · 最后由 zhangxun 回复于 2013年01月14日 · 3777 次阅读

我的请求到达了后台,后台通过 format.js 也到达前台的 create.js.erb 文件 我通过火狐的 firebug 查看请求的数字已经变化,就是页面没有及时刷新,只有手动刷新才能显示,这个是哪里的问题?

create.js.erb 文件内容试过以下两种方式: 第一种方式: page.replace_html('cart', render(@cart))

/* 第二种方式: $('#cart').append(<%= render(@cart) %>) */

上面两种方式都通过 firebug 都能看到请求的变化,但无法刷新 id 为 cart 的 div

ruby 1.9.3 rails 3.2.9 下 运行

这个和 Rails 没什么关系吧。。

第二种方式: $('#cart').append( "<%= escape_javascript( render(@car) ) %>");

or: $('#cart').append( "<%= j render(@car) %>");

#2 楼 @zhangxun 哥,谢谢阿!自己摸索的就是第二种方式!但不明白 escape_javascript 是什么作用呢?代表我使用 javascript 渲染吗?$('#cart').append( "<%= j render(@car) %>"); 直接用这种方式好像不行。

第一种方式是已经被废弃的 rjs 代码,没有 page.replace_html 这个方法了,所以是跑不通的。

#5 楼 @Rei 哦,难怪我看 的 那个 Web 敏捷开发上有几个地方用的 page.replace_html 方法,都无法实现的

#6 楼 @tank_lei 可以这么说,就是把 render 返回的东西包装成 js 可用的代码。 api 上可以看到源码: def escape_javascript(javascript) if javascript result = javascript.gsub(%r(\|<\/|\r\n|\3342\2200\2250|[\n\r"'])/) {|match| JS_ESCAPE_MAP[match] } javascript.html_safe? ? result.html_safe : result else '' end end

需要 登录 后方可回复, 如果你还没有账号请 注册新账号