使用remotipart插件上传图像时,T​​extarea包裹着JS

时间:2013-10-14 08:47:56

标签: remotipart

我正在使用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

有人请建议我如何解决这个问题或我做错了什么?

谢谢和问候,

4 个答案:

答案 0 :(得分:2)

您可以在js.erb回调文件中执行此操作:

<% if remotipart_submitted? %>
   //this will be executed when a file is uploaded
   $("#div").html("<%= escape_javascript( render "form" ).gsub('&quot;', "'") %>");
<% 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

参数:

  • $ form - jQuery表单对象,如$('#myForm')
  • $ url - sumbission url, 通常它应该具有表单动作值 $('#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 %>