1

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()

これにより、画像を変更せずに編集しようとすると問題が解決しますが、新しい画像にアップグレードしようとして編集を行うと、「解析エラー」が返されます。誰か助けてもらえますか?

4

2 に答える 2

1

@stephencorwinは正しいです。Remotipart は非表示の iframe を使用して画像を転送します。edit アクションが html リクエストを受け取った結果、サーバーは html レスポンスを返します。Remotipart は、必要な json 応答を html でラップするのに十分スマート$.parseJSON(data.responseText)であり、json を取得するために使用できます。しかし、純粋な json 応答を期待しているブラウザーは、parserror.

このエラーは無視してよいと思います。

于 2013-05-20T19:17:13.353 に答える