gpt4 book ai didi

ruby-on-rails - 使用 response_to ... format.json 和 jQuery Form Plugin by malsup

转载 作者:行者123 更新时间:2023-12-04 17:05:32 25 4
gpt4 key购买 nike

我在获取 jQuery Form Plugin 时遇到了一些麻烦使用文件上传字段正常工作。当我使用插件提交没有文件上传字段的表单时,format.json respond_to do |format| 的一部分块被正确调用。但是,通过添加文件上传字段,它只会执行 format.html使我的 javascript 代码认为发生错误的部分。

有没有人以前遇到过这个问题或者知道一种强制插件总是使用 json 的方法?或者,我可以修改插件用来强制 Rails 呈现 json 的 url 吗?

非常感谢您的帮助!代码如下:

# app/controllers/details_controller.rb
def create
@detail = Detail.new(params[:detail])

style = params[:detail_style].to_sym || :thumb
data = { :id => '5', :url => 'test.rails' }

respond_to do |format|
if @detail.save
flash[:notice] = 'Your image has been saved.'
data = { :id => @detail.id, :url => @detail.data.url(style) }

format.html { redirect_to :action => 'index' }
format.json { render :json => "<textarea>#{data.to_json}</textarea>", :status => :created }
else
format.html { render :action => 'new' }
format.json { render :json => @detail.errors, :status => :unprocessable_entity }
end
end
end

/* app/views/sidebar/_details.html.erb (excerpt) */

<% form_for(Detail.new, :html => { :multipart => true } ) do |f| %>
<%= hidden_field_tag 'detail_style', 'thumb' %>

<%= f.label :image, "Recent Images" %>
<%= f.file_field :image%>

<p>
<%= f.submit "Upload" %>
</p>
<% end %>

<script>
$(document).ready(function() {
var options = {
dataType: 'json',

success: function(json, statusText) {
console.log("success: " + json);
},

error: function(xhr, statusText, errorThrown) {
console.log("error: " + xhr.responseText);
}
};

$('#new_detail').ajaxForm(options);
});

最佳答案

要使 jQuery Form 插件使用 JSON 响应上传文件,需要做几件事。
在 javascript 中, .ajaxForm 的选项应该有:

dataType: 'json', // evaluate return as JSON

浏览器需要告诉 Rails 操作以 JSON 形式返回内容,
一种方法是在文件上传表单模板中添加一个隐藏的格式输入字段:
<%= hidden_field_tag 'format', 'json' %>

然后 Rails 操作将在 respond_to 块中运行 format.json 方法。

在服务器操作中
  • 将 JSON 封装在标签中,
    .ajaxForm 将正确解包字符串并评估 JSON
  • 将返回内容类型设置为“text/html”,否则某些浏览器
    (Firefox) 会尝试将返回的文件下载到文件中。

  • 例如
      respond_to do |format|
    format.json {
    render :json => "<textarea>#{data.to_json}</textarea>", :content_type => "text/html"
    }
    }

    关于ruby-on-rails - 使用 response_to ... format.json 和 jQuery Form Plugin by malsup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2229923/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com