0

我有一个简单的表格:

<%= 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!")
4

1 回答 1

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. 您的表单是否嵌套在另一个表单中?
于 2012-10-31T21:47:54.523 回答