使用Remotipart解析错误
我正在使用remotipart使用ajax上传和升级图像,问题是当我编辑项目时,ajax更新数据,但remotipart(https://github.com/leppert/remotipart)返回图像的’解析错误’更新。
这就是我的表单的样子:
= form_for(Achievement.new), html: {multipart: true , remote: true} do |f| = f.text_field :name = f.text_area :description = f.file_field :image = f.submit 'Send'
我正在使用单一表单来创建,编辑和删除“成就”。 这是我的js:
constructor: -> $('.edit_button').click -> $.ajaxSettings.dataType = "json" @id = $(this).data('id') @content = $(this).parent() @name = $('.form_achievement #name') @description = $('.form_achievement #description') @image = $('.form_achievement .avatar img') @button = $('.form_achievement form input:submit') @form = $('.form_achievement form') #Load data to edit on form $.ajax type: 'get' url: "/en/private/achievements/#{@id}/edit/" success: (data) => alert 'edit' @name.val(data.achievement.name) @description.val(data.achievement.description) @stat.html(data.achievement.stat) @value.val(data.achievement.value) @image.prop 'src', data.image #Change method of the form to put and bind event $.ajaxSettings.dataType = "json" @form.attr('method','put') $('.form_achievement form').attr('action', "/en/private/achievements/#{@id}") $('#achievement_form.accordion .form_achievement').unbind('click', NewAchievement) @form.bind 'ajax:success', (xhr, data, status) => @content.slideUp 'slow', -> $(this).remove() alert 'Edit' @form.bind 'ajax:error', (event, response, error) => alert error @button.bind 'change', => @changeButton() error: (data) -> alert 'error' changeButton: -> @form.submit()
当我尝试在没有更改图像的情况下进行编辑时,这解决了我的问题,但是当我进行编辑尝试升级到新图像时,返回一个’解析错误’。 谁能帮我?
您很可能会收到解析错误,因为您的响应实际上是HTML。
问题是默认情况下remotipart假定服务器响应是JS。 在您的情况下,您可以在呈现表单时设置数据类型:
form_for(Achievement.new), html: {:'data-type' => :html, :multipart => true, :remote => true}
或者它可以在JS中完成,如下所示:
@form.bind 'ajax:remotipartSubmit', (event, xhr, settings) => settings.dataType = "html *"
@stephencorwin是对的。 Remotipart使用隐藏的iframe来传输您的图像。 由于编辑操作接收到html请求,您的服务器将返回html响应。 Remotipart足够智能,可以在html中包装你想要的json响应,你可以使用$.parseJSON(data.responseText)
来获取json。 但是你的浏览器,它期望一个纯粹的json响应,将抛出parserror
。
我相信你可以简单地忽略这个错误。