我正在使用remotipart插件来执行Ajax图像上传。最近我将Rails版本从3.1.10升级到3.2.13。升级rails版本后,我发现ajax图像上传无效。
我有使用remotipart插件提交图像的表单并呈现响应。但在rails升级之后我无法呈现响应。在调查这个问题时,我发现响应是用textarea块包装的,因此不会被渲染。
我提到了一些相关的stackoverflow问题以及remotipart用户在github上报告的问题,但无法找出解决此问题的任何方法。
即: ajax post request responds with an html element when including an attachment with paperclip
Trouble with Paperclip and Ajax with Rails 3.2.8
https://github.com/JangoSteve/remotipart/issues/89
有人请建议我如何解决这个问题或我做错了什么?
谢谢和问候,
答案 0 :(得分:2)
您可以在js.erb回调文件中执行此操作:
<% if remotipart_submitted? %>
//this will be executed when a file is uploaded
$("#div").html("<%= escape_javascript( render "form" ).gsub('"', "'") %>");
<% else %>
$("#div").html("<%= escape_javascript( render "form" ) %>");
<% end %>
//Here you can put more js code
我使用了一个示例代码,因为你没有发布自己的代码。有了这个,你不需要降级你的remotipart。 在https://github.com/JangoSteve/remotipart/issues/89找到了这个解决方案。为我工作。
答案 1 :(得分:0)
对我来说,这个问题的唯一解决方案是编写自定义表单提交功能,该功能通过表单数据发送Ajax请求。这不是最佳解决方案,因为FormData仅受新浏览器支持(IE10 +)。
这是coffescript:
formAjaxSubmit = ($form, $url) ->
$formData = new FormData($form[0])
$.ajax(
type: 'POST'
url: $url
data: $formData
dataType: 'JSON'
processData: false
contentType: false # this is crucial line for $.ajax to work with formData
error: (xhr, status, error) ->
$.fn.process_ajax_error(null, xhr, status, error)
success: (data, status, xhr) ->
$.fn.process_ajax_success(null, data, status, xhr)
)
return false
参数:
$('#myForm')
$('#myForm').attr('action')
$.fn.process_ajax_...
- 这些是自定义响应处理函数
答案 2 :(得分:0)
希望你找到解决方案。
将data: {type: :script}
放在表单中应该可以正常工作
答案 3 :(得分:0)
这是最终为我解决的问题。 也来自这里:https://github.com/JangoSteve/remotipart/issues/89
以前与gsub类似的建议为我生成了一些无效的json / js。以下解决方案有效!
<% if remotipart_submitted? %>
$('.form-wrapper').html("<%= j "#{render('form')}" %>");
<% else %>
$('.form-wrapper').html("<%= j render('form') %>");
<% end %>