我无法使用form_for获取远程选项。 Rails 4. jQuery不是一个选项。我想知道是否需要jQuery或者我的代码是否有错误。
表单(更新操作,适用于服务器端)。
<%= form_for @image, :remote => true, :authenticity_token => true, :url => image_path(@image, :format => :json), :data => {type: :json}, :method => "patch", :html => {:class => 'base-64-edit-form', :multipart => true, :id => "base-64-edit-form", :class => "hide" } do |f| %>
<%= f.hidden_field :update_image_data %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :width, :value => @image.width %>
<%= f.hidden_field :height, :value => @image.height %>
<%= f.hidden_field :folder_id %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
表单提交:
document.getElementById("image_update_image_data").setAttribute("value", data);
document.getElementById("image_width").setAttribute("value", parseInt(pixel_canvas.style.width));
document.getElementById("image_height").setAttribute("value", parseInt(pixel_canvas.style.height));
document.getElementById("image_folder_id").setAttribute("value", config.folder_id);
document.body.addEventListener("ajax:success", function(e){
console.log("ajax SUCCESS");
})
document.body.addEventListener("ajax:failure", function(e){
console.log("ajax FAILURE");
})
document.getElementById("base-64-edit-form").submit();
document.getElementById("loading").classList.add("active");
控制器操作:
def update
respond_to do |format|
if @image.update(image_params)
format.json { render :json => true}
else
format.json { render :json => @image.errors, status: :unprocessable_entity }
end
end
end
成功更新会在页面上显示单词“true”,而不是将真正的json值返回给回调。所以我假设没有进行ajax调用而且没有任何魔法发生。这可能是因为我没有使用jQuery吗?
如果我更换
format.json { render :json => true}
与
format.json { head :no_content }
页面未重新呈现,Chrome获得200,但出现错误。