Jquery 在使用Ajax更新我的div(Rails 3)时遇到问题

Jquery 在使用Ajax更新我的div(Rails 3)时遇到问题,jquery,ruby-on-rails,ruby-on-rails-3,Jquery,Ruby On Rails,Ruby On Rails 3,我有一个表单,用户将使用它输入一本书的标题,我将把它传递到一个外部的图书搜索API,然后我想在不重新加载页面的情况下直接显示图书结果 new.html.haml (输入标题的表格) books_controller.rb (书籍搜索路径位于此处,指向“搜索”操作) 我知道\u results.html.haml正在运行,因为我看到了“get title”日志,但它没有显示在resultsdiv中的new.html.haml上。知道发生了什么吗 编辑:更新的书籍和控制器。有完整的代码。Book.r

我有一个表单,用户将使用它输入一本书的标题,我将把它传递到一个外部的图书搜索API,然后我想在不重新加载页面的情况下直接显示图书结果

new.html.haml (输入标题的表格)

books_controller.rb (书籍搜索路径位于此处,指向“搜索”操作)

我知道
\u results.html.haml
正在运行,因为我看到了“get title”日志,但它没有显示在
results
div中的new.html.haml上。知道发生了什么吗

编辑:更新的书籍和控制器。有完整的代码。Book.rb是空模型,除了:attr_可访问字段

编辑: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";
m=$(“#结果”);
m、 innerHTML="\n\n标题\n ISBN\n\n\n奥德赛\n\n\n\n\n\n\n荷马的奥德赛\n\n\n 1604240687\n\n\n\n\n\n\n\n奥德赛\n\n\n\n\n\n\n\n\n荷马的奥德赛\n\n\n\n\n 143781800\n\n\n\n\n\n\n\n\n\n\n奥德赛\n0872204847\n\n\n\n\n奥德赛(企鹅经典)\n\n\n 014039954\n\n\n\n\n《奥德赛:菲茨杰拉德的翻译》\n\n\n 0374525749\n\n\n\n\n《奥德赛》\n\n\n\n 1613823398\n\n\n\n\n\n\n《奥德赛》\n\n\n\n\n\n\n\n《奥德赛》(企鹅经典)\n\n\n 0140449116\n\n\n\n“;

编辑:这是Rails 3.2.8

尝试将以下块添加到您的
搜索
操作中:

respond_to do |format|
  format.js
end
另外,将
search.js.erb
中的行替换为:

$('#results').html("<%= escape_javascript(render :partial => 'results') %>");
$('#results').html(“'results')%>”;
更新


看起来真正的问题(假设没有其他语法问题)是并非所有浏览器都支持innerHTML(请参见)

看起来所有的部分都在那里。DOM中到底发生了什么?响应中是否没有更改、意外更改、错误代码,或者没有响应(在浏览器的开发工具中)?@normalocity DOM中没有任何更改。Chrome开发工具检查器显示,当我单击“搜索”时,“搜索”请求实际上已通过!按钮,但页面本身没有改变。rails日志显示_results.html.haml正在执行,但当我单击按钮查看源代码时,“响应”“div仍然为空。这将有助于发布完整的模型和控制器。@prusswan我添加了完整的Book控制器和模型,但此时我甚至没有保存任何ActiveRecord;只需使用用户参数查询外部API。事实上,书本模型是空的,除了:attr_可访问的行。拥有模型/控制器的原因是,有时会使用不寻常的模型定义和过滤器,这可能导致意外的结果。我做了这两件事,不幸的是,没有起作用。如果有用的话,我在原始问题中添加了一个ajax响应示例。@Tim我已经更新了答案,考虑到js.erb不应该是(注意html()中的额外引号):
$('#results').html(“'results.html.haml”)%>”编辑:这成功了!API实际上只是速度太慢了。谢谢@prusswan!为什么我需要respond\u-to-block?我删除了respond\u-to-block(只保留了你的第二个建议),它似乎仍然有效。我不知道为什么会这样。
- @results.each do |b| 
  %tr 
    %td 
      - Rails.logger.info("Got title...#{b.title}")
      = b.title
    %td 
      = b.isbn
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";
respond_to do |format|
  format.js
end
$('#results').html("<%= escape_javascript(render :partial => 'results') %>");