【发布时间】:2012-09-01 19:18:04
【问题描述】:
我有一个表单,用户将使用它来输入书名,我将把它传递给外部图书搜索 API,然后我想在不重新加载页面的情况下在下方显示图书结果。
new.html.haml
(输入标题的表格)
= form_tag book_search_path, :method => :get, :remote => true do
= label_tag "Title: (#{@title})"
= text_field_tag "title", ""
= submit_tag "Search!"
#results // results should be updated here
books_controller.rb
(book_search_path 到这里,指向“搜索”操作)
class BooksController < ApplicationController
def index
@books = Book.find :all
render :action => 'list'
end
def new
@books = Book.find :all
end
def search
Rails.logger.info("DOSEARCH!!!")
# HIT THE API
@results = search_keywords params[:title]
# implicit render search.js.erb
end
search.js.erb
(在 books#search 操作结束时呈现)
m = $('#results');
m.innerHTML = "<%= escape_javascript(render :partial => 'results.html.haml') %>";
_results.html.haml
(这是我想通过ajax插入到结果div中的)
- @results.each do |b|
%tr
%td
- Rails.logger.info("Got title...#{b.title}")
= b.title
%td
= b.isbn
我知道 _results.html.haml 正在运行,因为我看到了“Got title”日志,但它没有显示在 results div 内的 new.html.haml 上。知道发生了什么吗?
编辑:更新 books_controller。带有完整的代码。 Book.rb 是一个空模型,除了 :attr_accessible 字段
编辑:Ajax 响应:
m = $('#results');
m.innerHTML = "<table id=\'results_table\'>\n <tbody><\/tbody>\n <th>Title<\/th>\n <th>ISBN<\/th>\n <tr>\n <td>\n The Odyssey\n <\/td>\n <td>\n \n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey of Homer\n <\/td>\n <td>\n 1604240687\n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey\n <\/td>\n <td>\n 1613821166\n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey of Homer\n <\/td>\n <td>\n 1437818080\n <\/td>\n <\/tr>\n <tr>\n <td>\n Odyssey\n <\/td>\n <td>\n 0872204847\n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey (Penguin Classics)\n <\/td>\n <td>\n 0143039954\n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey: The Fitzgerald Translation\n <\/td>\n <td>\n 0374525749\n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey\n <\/td>\n <td>\n 1613823398\n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey\n <\/td>\n <td>\n 0763642681\n <\/td>\n <\/tr>\n <tr>\n <td>\n The Odyssey (Penguin Classics)\n <\/td>\n <td>\n 0140449116\n <\/td>\n <\/tr>\n<\/table>\n";
编辑:这是 Rails 3.2.8
【问题讨论】:
-
看起来所有的碎片都在那里。 DOM 中究竟发生了什么?响应中是否存在 NO 更改、意外更改、错误代码或 NO 响应(在浏览器的开发工具中)?
-
@normalocity DOM 没有变化。 Chrome 开发工具检查器显示,当我单击“搜索!”时,“搜索”请求实际上已通过。按钮,但页面本身并没有改变。 rails 日志显示 _results.html.haml 正在执行,但是当我单击按钮后查看源代码时,“响应”div 保持为空。
-
也有助于发布完整的模型和控制器。
-
@prusswan 我添加了完整的 Book 控制器和模型,但此时我什至没有进行任何 ActiveRecord 保存;只需使用用户参数查询外部 API。事实上,Book 模型是空的,除了它的 :attr_accessible 行。
-
拥有模型/控制器的原因是有时会使用不寻常的模型定义和过滤器,这可能会导致意外结果
标签: jquery ruby-on-rails ruby-on-rails-3