Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 用AJAX更新局部视图_Ruby On Rails_Ajax_Ruby On Rails 3_Jquery - Fatal编程技术网

Ruby on rails 用AJAX更新局部视图

Ruby on rails 用AJAX更新局部视图,ruby-on-rails,ajax,ruby-on-rails-3,jquery,Ruby On Rails,Ajax,Ruby On Rails 3,Jquery,我有一个包含许多图像的页面,每个图像都有一个关联的文本框,用于提交该图像上的标记。每个图像和文本框都通过局部视图进行渲染。目前,我能够更新标签和一切工作正常,通过一个完整的页面刷新。我希望能够通过AJAX实现所有这些,但我在这方面遇到了一些问题 以下是部分视图中的表单代码: <%= image_tag image.src %> <%= form_tag :controller => "images", :action => :update_tags, :remote

我有一个包含许多图像的页面,每个图像都有一个关联的文本框,用于提交该图像上的标记。每个图像和文本框都通过局部视图进行渲染。目前,我能够更新标签和一切工作正常,通过一个完整的页面刷新。我希望能够通过AJAX实现所有这些,但我在这方面遇到了一些问题

以下是部分视图中的表单代码:

<%= image_tag image.src %>
<%= form_tag :controller => "images", :action => :update_tags, :remote => true, :image => image.id do %>
  <td><%= label_tag "Tags:" %></td>
  <td><%= text_field_tag :tags, image.tags %></td>
  <td><%= submit_tag "Submit" %></td>
<% end %>
以及更新_tags.js.erb:

$("#image_#{image.id}").html( "<%= escape_javascript(render :partial => 'image_tag', :locals => {:image => image} ) %>" );
$(“#image#{image.id}”).html(“'image_tag',:locals=>{:image=>image})%>”;

它目前正在功能上工作,但没有AJAX魔术发生。我仍在学习Rails和jQuery,因此非常感谢您的帮助。我想我已经包括了所有相关的代码,但是如果还有什么我应该提供的,请告诉我。谢谢

我认为有一点是错误的,那就是不能对每个图像div使用
#image
(假设页面上有很多图像div)

每当您使用这样的元素ID时,它必须对整个页面是唯一的,否则jQuery将找到
#image
的第一个实例,然后停止。因此,您需要通过可能包括一个模型ID等,使每个图像ID都是唯一的。因此,它将是
#image_1
#image_2

另一件事是,为什么你有

format.html { redirect_to :back, :remote => true }
在AJAX调用的控制器操作中?AJAX只会返回
format.js
,因此它似乎没有必要。也许我误解了什么

代码的其余部分看起来是正确的。您可能需要检查Rails服务器日志,以确保在调用期间呈现您的
update_tags.js.erb
文件。如果是,那么您有一个javascript错误

更新:您还需要确保已经安装了它,以便Rails能够正确触发AJAX调用

如果使用AJAX,则不需要呈现HTML。默认情况下,它将呈现
controller\u action\u name.js.erb
,因为它是AJAX调用而不是浏览器调用。您应该在Rails服务器输出中看到如下内容:

Started PUT "/images/1/update_tags" for 127.0.0.1 at 2011-07-16 09:33:20 -0400
  Processing by ImagesController#update_tags as JS
  Parameters: {"image_id"=>"1"}
  Image Load (1.6ms)  SELECT "images".* FROM "images" WHERE "images"."id" = 1 LIMIT 1
  CACHE (0.0ms)  SELECT "images".* FROM "images" WHERE "images"."id" = 1 LIMIT 1
Rendered images/update_tags.js.erb (11.3ms)
Completed 200 OK in 346ms (Views: 23.7ms | ActiveRecord: 1.7ms)

在这一行
中,您不能执行常规的Ruby字符串插值,因为您在rails视图中。需要
在发布这个问题后,我实际上更新了我的div id,使之与您所说的完全一致。它现在在我的OP中更新了。我注释掉了format.html行,现在当我提交表单中的内容时,它不会呈现任何HMTL。我看到“”作为URL,我看到Rails服务器中提交的参数,但没有呈现HTML。这是否意味着没有调用我的javascript?JS文件不是应该以在控制器中调用的方法命名吗(在我的例子中是update_tags.JS.erb)?请看我的更新答案,我认为您可能缺少Rails jquery适配器,Rails是如何处理AJAX调用的
format.html { redirect_to :back, :remote => true }
Started PUT "/images/1/update_tags" for 127.0.0.1 at 2011-07-16 09:33:20 -0400
  Processing by ImagesController#update_tags as JS
  Parameters: {"image_id"=>"1"}
  Image Load (1.6ms)  SELECT "images".* FROM "images" WHERE "images"."id" = 1 LIMIT 1
  CACHE (0.0ms)  SELECT "images".* FROM "images" WHERE "images"."id" = 1 LIMIT 1
Rendered images/update_tags.js.erb (11.3ms)
Completed 200 OK in 346ms (Views: 23.7ms | ActiveRecord: 1.7ms)