Используя respond_to … format.json и Плагин Формы jQuery malsup

У меня есть немного бита проблемы, заставляя Плагин Формы jQuery работать правильно с полем загрузки файла. Когда я использую плагин для представления формы без поля загрузки файла, format.json часть respond_to do |format| блок называют правильно. Однако путем добавления поля загрузки файла, это только выполняется format.html часть, которая заставляет мой код JavaScript думать, что ошибка произошла.

Кто-либо столкнулся с этим прежде или знает способ вынудить плагин всегда использовать json? С другой стороны, я могу изменить URL что сменное использование, чтобы вынудить направляющие представить json?

Большое спасибо за любую справку! Код ниже:

# app/controllers/details_controller.rb
def create
  @detail = Detail.new(params[:detail])

  style = params[:detail_style].to_sym || :thumb
  data = { :id => '5', :url => 'test.rails' }

  respond_to do |format|
    if @detail.save
      flash[:notice] = 'Your image has been saved.'
      data = { :id => @detail.id, :url => @detail.data.url(style) }

      format.html { redirect_to :action => 'index' }
      format.json { render :json => "", :status => :created }
    else
      format.html { render :action => 'new' }
      format.json { render :json => @detail.errors, :status => :unprocessable_entity }
    end
  end
end

/* app/views/sidebar/_details.html.erb (excerpt) */

<% form_for(Detail.new, :html => { :multipart => true } ) do |f| %>
  <%= hidden_field_tag 'detail_style', 'thumb' %>

  <%= f.label :image, "Recent Images" %>
  <%= f.file_field :image%>

  

<%= f.submit "Upload" %>

<% end %>

3 ответа

По-видимому, установка заголовка Accept невозможна, когда используется ajaxSubmit и загружается файл.

См. ответ malsup в этой теме здесь.

Он говорит:

Загрузка файлов не использует ajax, плагин формы только делает так. таким образом. При загрузке файла происходит настоящий браузерный сабмит.

1
ответ дан 13 December 2019 в 05:34
поделиться

Можете ли вы проверить сообщение на сервере с помощью firebug и вставить сюда заголовки запроса. Мы хотим убедиться, что заголовок Accept установлен на json. Кроме того, какую версию рельсов вы используете?

1
ответ дан 13 December 2019 в 05:34
поделиться

Я все еще не уверен, почему это не работает, но я перепробовал много вещей и наконец нашел решение.

Я попробовал изменить url, добавив .json в конец, что заставило Rails отобразить блок format.json, но это запутало мой браузер, заставив его думать, что я хочу загрузить файл.

Затем я попробовал изменить url, передав параметр ?format=json, который, к сожалению, сделал то же самое.

В конце концов, я попробовал изменить format.json на просто format.js (Javascript) и добавить .js в url, но все равно использовал тот же render :json => ... , что и раньше, а также устанавливаю параметр dataType в вызове jQuery на json. Похоже, что это работает, хотя это и не самое оптимальное решение.

Я надеюсь, что кто-то еще найдет это полезным. Я напишу еще раз, если найду правильный ответ. А пока, если у кого-то еще есть правильный ответ, дайте мне знать, и я приму ваш!

1
ответ дан 13 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: