Rails Ajax 中的错误

Error in Rails Ajax

我曾经关注 coderwall tutorial in ajax 但当我打开新标签时我得到 ActionController::UnknownFormat 以下 link <%= link_to 'Link Name', fetch_items_path(:cat_id => cat.id), :remote => true %>.这有什么问题吗?谢谢!

此外,当我点击 link 它没有任何反应。

这是

控制器:

def from_category
  @selected = Item.find(params[:cat_id])
  respond_to do |format|
    format.js
  end
end

观看次数

index.html.erb

<%= link_to 'Link Name', fetch_items_path(:cat_id => cat.id), :remote => true %>

_items_list.html.erb

<% items.each do |item| %>
  <div class="item_box">
    ...
  </div>
<% end %>

item_grid.html.erb

<div>
  <div id="items_grid" >
    <%= render partial: 'items_list', locals: {items: items}  %>
  </div>
</div>

from_category.js.erb

$("#items_grid").html("<%= escape_javascript(render partial: 'items_list', locals: { items: @selected } ) %>");

可能是您发送了一个 json 请求,而您的 respond_to 块未涵盖该请求。

您可以通过执行以下操作来查看:

respond_to do |format|
  format.json
  format.js
end

或者,您也可以尝试:

<%= link_to 'Link Name', fetch_items_path(:cat_id => cat.id), remote: true, format: :js %>

如果其中任何一个有效,这实际上意味着您正在发送一个 JSON 请求,该请求将不会被处理。如果是这种情况,上面的补丁应该可以解决它。

--

其次,当你提到

"I open to new tab"

您意识到 Ajax 并不意味着同步工作,对吧?这意味着它并不意味着加载整个页面的 "in order"。它必须与页面本身一起加载。为此,您需要从嵌入它的页面调用它。

--

最后,您应该注意浏览器中的JS console

对于 Chrome 和 Firefox,您可以通过右键单击并选择 "Inspect Element" 来访问它。这将调出 "Developer Console",从中您将能够看到 javascript:

发生了什么

现在,这对您的案例的重要性很简单。当您单击 link 时,您提到了 "nothing happens"。有几种可能性:

  • 您没有启用 jquery-ujs(这是 Rails 用来让 remote 工作的
  • 您的服务器发生错误,导致脚本无法触发。

无论哪种方式,您都可以通过单击开发人员控制台并检查 networking 选项卡来了解发生了什么。请注意,当您单击 link 时 - 它会创建一个新请求吗?如果没有,您必须将 jquery-ujs gem 添加到您的 Application.js 文件,否则服务器上的脚本有问题。

经过分析,我得到了错误的部分代码。是关于路由的。

改为:

get "/fetch_items" => 'items#from_category', as: 'fetch_items'

我改为:

get "fetch_items"

现在可以正常使用了。