2010-06-04 58 views
1

我试图通过ajax表单上传文件上传..因为我使用jquery表单插件文件上传工作得很好..但在respond_to js块中呈现的html会以纯文本形式返回。希望有人能帮助jquery表单插件/ rails文件上传/纯文本响应而不是html

控制器:

if @visitreport.save
flash[:notice] = "Der Besuchsbericht wurde erstellt."
respond_to do |format|
format.html{redirect_to @visitreport}
format.js
end

create.js.erb:

$("#last_customers").replaceWith('<div id="last_customers"><%= escape_javascript(render :partial => 'customers/last_customers') %> </div>');
$("#reminder").replaceWith('<div id="reminder"><%= escape_javascript(render :partial => "customers/reminder", :locals => {:date => Date.today+1}) %>');
..和其他一些jQuery的 - 魔术

_last_customers.html.haml: - - 举个例子,

%h5 Die zuletzt bearbeiteten Kunden
%hr
.subcolumns
-get_user_customers.each do |uc|
.c25l
.subcl
=link_to("#{uc.id}", customer_path(uc.id))
.c75l
.subcl
=link_to("#{get_customer_name(uc.id)}", customer_path(uc.id))

的反应是这样的:

&lt;div class="report round_corners box_shadow"&gt;&lt;h5&gt;bearbeitet am Freitag, 04. Juni 2010, 12:06 Uhr&lt;/h5&gt; &lt;div class='text-right'&gt; per Telefon am 05.07.2010 &lt;/div&gt; &lt;p class='report_content'&gt; fg &lt;/p&gt; &lt;div class='text-right reminder'&gt; Wiedervorlage am 14.12.2015 &lt;br /&gt; &lt;a href="/visitreports/138/edit"&gt;Bericht bearbeiten &gt;&gt;&lt;/a&gt; &lt;/div&gt; &lt;h5&gt;Dateien&lt;/h5&gt; &lt;a href="/assets/27"&gt;bg_mainmenu.gif&lt;/a&gt; &lt;/div&gt;

的application.js:

("#new_visitreport").submit(function() { 
$(this).ajaxSubmit(
dataType : 'script', 
    iframe : true, 
success : function (data) { 
    data = eval(data.replace("<pre>", "").replace("</pre>", "")); 
    } 
}); 
return false; 
}); 

我到底做错了什么? 希望有人能帮助! jquery 1.4.2版本

回答

1

根据jQuery表格documentation,建议将响应封装在textarea中。在ERB例如:

<textarea> 
    jQuery("#documents").prepend("<%= escape_javascript(render @document) %>"); 
</textarea> 

然后设置内容类型text/html控制器上:

respond_to do |format| 
    # jQuery Form needs to have text/html as Content-Type. 
    format.js { render :content_type => Mime::HTML.to_s } 
end 
+0

谢谢!这个解决方案对我来说工作得很好..似乎我忽略了jquery表单文档中的textarea部分。 – ThorKhan 2010-06-07 06:49:12

+0

我不知道他们为什么用text/html代替文本/纯文本... – ThiefMaster 2011-06-28 09:39:24

+0

@ThiefMaster [文档](http://jquery.malsup.com/form/#file-upload)解释它。它与用于上传文件的隐藏iframe技术有关。服务器响应被写入隐藏的iframe。如果响应是HTML或XML,没有问题,如果它是JavaScript或JSON,那么一些字符将不得不以实体代码表示。所以作为一种解决方法,JavaScript和JSON代码可以用textarea打包。 – htanata 2011-06-28 15:49:31