博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[AWDwR4] Getting AJAX to work in Rails 3 with jQuery
阅读量:5051 次
发布时间:2019-06-12

本文共 2148 字,大约阅读时间需要 7 分钟。

在 Iteration F2 中,按照书上的改法,单击Add Cart之后,页面没有丝毫反应。看后台有错如下:

Completed 500 Internal Server Error in 12msActionView::MissingTemplate (Missing template line_items/create, application/create with {:locale=>[:en], :formats=>[:js, :html], :handlers=>[:erb, :builder, :coffee]}. Searched in:  * "/home/csd/railsProjects/depot/app/views"):  app/controllers/line_items_controller.rb:55:in `create'  Rendered /usr/local/rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/missing_template.erb within rescues/layout (0.5ms)

  上网搜索,发现是由于

导致找不到 create.js.erb模板。

  如果想使用JQuery而非 RJS,解决方法如下:

  step1. 把 app/views/line_items/create.js.rjs 文件改名为 app/views/line_items/create.js.erb。

    step2. 用如下的内容替换app/views/line_items/create.js.rjs 的内容:
  

$('#cart').html("<%= escape_javascript(render(@cart)) %>");
  •  $('#cart')用jQuery 语法来选中 id为 cart的元素, 然后将其内容赋值为 render(@cart)。
  • escape_javascript 会将回车,单,双引号进行转义处理。

  修改完成后再次单击 Add to cart 按钮,此时可以看到左边的列表自动更新了,服务器端日志如下:

 

  Rendered line_items/_line_item.html.erb (4.8ms)   Rendered carts/_cart.html.erb (8.3ms)   Rendered line_items/create.js.erb (10.4ms)   Completed 200 OK in 24ms (Views: 12.4ms | ActiveRecord: 3.9ms)

  

  PS:由于在 app/views/store/index.html.erb 中的 button_to 中有参数 :remote => true, 所以 浏览器会发送 Ajax 请求到服务器端(Ajax请求dataType默认是script,即要服务器端返回JavaScript格式的数据)。在app/controllers/line_items_controller.rb 中 create action 中有如下代码:

respond_to do |format|      if @line_item.save             format.html { redirect_to store_url}        format.js        format.json { render json: @line_item, status: :created, location: @line_item }      else        format.html { render action: "new" }        format.json { render json: @line_item.errors, status: :unprocessable_entity }      end    end

  respond_to里面的代码执行逻辑如下: 当@line_item保存到数据库成功,如果客户端要求返回的是html格式,则重定向到store页面,如果客户端要求返回的是js格式,则默认渲染(format.js 之后没有 block 来指定操作) 与此action(create)关联的JavaScript模板(create.js.erb)。参考 。

   PS:如果使用的是火狐浏览器,可以使用强大的插件来调试,在网络->XHR 标签页中可以实时地看到客户端的Ajax 请求和服务器端的响应。

  参考文章:

   
    可以学习 Rails 3.2 的 Ajax 向导  http://chloerei.com/2012/04/21/rails-3-2-ajax-guide/

 

转载于:https://www.cnblogs.com/Jack47/archive/2012/11/04/2753977.html

你可能感兴趣的文章
JSP中为什么会有直接可以使用的java对象,但在jdkAPI中找不到,因为他们是tomcat中的类。这个在tomcat官网中可以看到...
查看>>
RenderBody,RenderPage和RenderSection
查看>>
html和php添加UTF-8 head标签
查看>>
Django框架 第一天
查看>>
windows服务的几个操作
查看>>
计算机网络知识—(TCP)
查看>>
MySQL的权限赋予
查看>>
Internet History, Technology and Security (Week7)
查看>>
简要说明一下offsetWidth的替换
查看>>
自我学习而已——javascript——Function类型和基本包装类型
查看>>
Python数据分析与机器学习-Pandas_5
查看>>
css和css和html的四种结合方式
查看>>
Makefile里面的$(MAKE)到底是啥
查看>>
ASP.NET中多按钮回车键触发form的submit的实现方法
查看>>
关于元素居中之我见(干货)
查看>>
岂曰无衣与子同袍
查看>>
Android aapt使用小结
查看>>
洛谷 P2872 道路建设
查看>>
JSP解决中文乱码问题
查看>>
海量数据处理专题(三)——Hash
查看>>