远程表单呈现为HTML而不是JS

时间:2012-10-31 21:10:32

标签: ajax ruby-on-rails-3 forms

我有一个简单的表格:

<%= form_for [current_user, @bookcase], :id => "shelf_update_form", :remote => true, :html => { :multipart => true} do |f| %>
  <input id="bookcase_image" class="file" type="file" name="bookcase[image]" size="13">
<% end %>

在选择文件时自动上传:

$("#shelf_update_form").change(function() {
  $("#shelf_update_form").submit();
});

我希望更新操作呈现js视图,但默认情况下它会呈现html。我尝试强制它像这样呈现js:

respond_to do |format|
  format.js
end

但后来我收到了这个错误:

NetworkError: 406 Not Acceptable

即便如此,我的日志报告:

Processing by BookcasesController#update as HTML

如何让它作为JS处理呢?

更新:

观点:

triggerAjaxHistory("<%= @href %>", false);

我也可以使用更通用的视图获得相同的结果:

alert("I work now!")

1 个答案:

答案 0 :(得分:0)

  1. 在控制器中,执行

    respond_to do |format|
      format.js if request.xhr?
    end
    
  2. 您的观点是否以.js.erb命名?

  3. 您可以在浏览器中使用firebug进行检查,确切地知道您的回复是什么吗?打开网络日志记录并查看响应。
  4. 您的布局中还有以下内容吗?

    <%= javascript_include_tag :defaults %>
    <%= csrf_meta_tag %>
    
  5. 您可以输入logger.info whatever_message命令以确保执行控制器操作并进入正确的视图吗?
  6. 如果在控制器中专门指定js格式为

    会发生什么
     class UserController < ApplicationController
       respond_to :js, :only => :update, :layout => 'false`
    
  7. 如果您将form_for中的格式指定为:format => :js
  8. ,会发生什么情况
  9. 您的表单是否嵌套在另一个表单中?