2

看了几篇关于 ROR 中 Ajax 的文章后,我仍然对如何使用 Ajax 感到困惑!

在我的项目中有一个main/index.htmland 。main_controller我想实现如下所述的功能:

单击链接中的链接后index.html,RSS 内容将显示在索引中。我已经通过跳转到另一个网页来实现该功能。但是我不知道如何使用 Ajax ......

指数

 <h1>Listing Jobs</h1>
<table>
    <tr>
        <th>Source</th>
        <th></th>
    </tr>
<% @jobs.each do |job| %>
    <tr>
        <td><%= job.source %></td>
        <td>
            <%= link_to 'Show', #:controller=>'main', :action=>'show',
                :id=>job.id,:remote=>true, "data-type"=>:json, :class=>'updateJob'%>
        </td>
    </tr>
<% end %>
</table> 

<script type="text/javascript" charset="utf-8">

$(function(){
#   $('#'+job.id).bind("click",function(){
#       $('#showJob').append('Hi')
#   })

$('#'+job.id).bind("ajax:success",function(data, status, xhr){
    ("<h1>hello</h1>").appendTo("#showJob") 
})

})
</script>

显示.html

<div id="showJob">
    </div>
<table>
    <tr>
        <th>Source</th>
        <th>Link</th>
    </tr>
<% @feed.items.each do |item| %>
    <tr>
        <th><%= item.title %></th>
        <th><%= item.link  %></th>
    </tr>
<% end %>

</table> 

主控制器

require 'rss'
require 'rss/1.0'
require 'rss/2.0'
require 'open-uri'

class MainController < ApplicationController
    #get /jobs
    def index
        @jobs=Job.all

        respond_to do |format|
            format.html # index.html.erb
            format.json {render:json=>@jobs}
        end
    end

    def welcome
        @num_sources =Job.count
    end

    def show
        job=Job.find(params[:id])
        url=job.url
        open(url) do |rss|
            @feed = RSS::Parser.parse(rss)
        end

        respond_to do |format|
        # format.html do
        #   render :partial=>'main/show'
        # end
        format.json {render :json=>@feed}
        end
    end

end
4

1 回答 1

0

不要绑定到click事件,而是为要处理的 ajax 事件添加绑定。通常,这将包括以下ajax:success事件:

$(function(){
    $('#'+job.id).on("ajax:success", function(data, status, xhr){
        // do something with 'data' json object
    });
});

可在此处找到完整的事件列表。

要让控制器在渲染时使用“json”格式,请将链接更改为如下所示:

<%= link_to 'Show', { :controller=>'main', :action=>'show', :id=>job.id }, 
                    :data => {:remote=>true, :type=>:json}, :class=>'updateJob'%>

请注意,构成 url(控制器、操作、id)的散列需要在与其他属性分开的散列中传递才能正常工作。如果您将作业设置为routes.rb文件中的资源,则可以使这更简单:

<%= link_to 'Show', job, :data => {:remote=>true, :type=>:json}, :class=>'updateJob'%>
于 2013-03-03T03:24:52.530 回答