Rails中的respond_to出现未知格式错误。正确地尝试实施轮询更新

时间:2015-08-12 02:46:46

标签: javascript ruby-on-rails ajax view controller

您好我完全坚持这一点并寻求帮助。

当我在对象Input 1 : StationFrom - Guindy, StationTo - Kadambakkam Output 1 : Print ticket. i.e. StationFrom : Guindy, StationTo : Kadambakkam, Total Stops : 3, Total Fare : 10 Input 2 : StationFrom - Guindy , StationTo - Chennai Fort Output 2 : Print ticket. i.e. StationFrom : Guindy, StationTo : Chennai Fort, Total Stops : 8, Total Fare :15 上进行演出时,我想要一些javascript每十秒开始一次轮询,以异步方式调用simulation

我想通过simulation#update执行此操作,因此:

respond_to

所以我会有一个def show @simulation = Simulation.find(params[:id]) respond_to do |format| format.js format.html { redirect_to simulation_url } # This causes problems end end 做一些事情(抱歉为coffeescript)

update.js.erb

如果我包含$.ajax({ type: "PUT", url: "/simulations/#{params}" }) $('#sim_div').html("<%= j (render @simulation) %>"); setTimeout(callUpdate, 10000) return javascript没有运行并且我得到格式错误,并且如果我确实包含该行,那么我得到一个未知的javascript部分被调用格式错误。

这是怎么回事?我已经在资产管道中尝试了大量使用coffeescript的解决方案,并且奇怪的包含和内联javascript没有任何问题。

为清楚起见,我的观点是:

format.html

以及脚本和视图加载的部分内容:

<%= render 'simulation' %>

<%= link_to 'Back', simulations_path %>

2 个答案:

答案 0 :(得分:1)

也许问题首先在于显示操作, 并且缺少remote: true选项?

如果它是链接,则尝试使用remote: true选项,例如:

<%= link_to 'Show', simulation_path(my_simulation), remote: true %>

与按钮相同

<%= button_to 'Show', simulation_path(my_simulation), remote: true %>

这应该导致Rails以正确的格式调用控制器,并且在日志中您应该看到提到的JS,例如

Processing by SimulationsController#show as JS

也可能您缺少部分数据类型,请尝试:

$.ajax({
    type: "PUT",
    url: "/simulations/#{params}",
    dataType: "script"
})

答案 1 :(得分:0)

您可以尝试respond_to :html, :js之类的快捷方式,看看是否可以清除它。否则尝试更明确的事情:

def show
  @simulation = Simulation.find(params[:id])
  respond_to do |format|
    format.js { render: "some view"}
    format.html { redirect_to simulation_url }
  end
end
使用ajax调用show时,format.js操作中的

:show默认会呈现show.js.erb。 html响应将是重定向。

This博文可能会有所帮助。