【问题标题】:Empty body when respond_with used in Rails 5在 Rails 5 中使用 respond_with 时为空体
【发布时间】:2017-10-31 18:33:28
【问题描述】:

我正在尝试使用 ajax(成功时)从 rails 5 中的控制器渲染部分内容,但在操作渲染部分内容后,空白数据将传递给 ajax。

相同的代码正在使用 rails4。我也为 rails5 更新了响应者 gem。

控制器:

 respond_with do |format|
    format.html do
      if request.xhr?
        @images = get_images
        session[:prev_images] = submitted_ids
        session[:prev_winner] = winner_id
        @prev_images = Lentil::Image.find(submitted_ids).sort_by{ |i| i.id }
        @prev_winner = session[:prev_winner]

        render :partial => "/lentil/thisorthat/battle_form", :locals => { :images => @images, :prev_images => @prev_images, :prev_winner => @prev_winner }, :layout => false, :status => :created
      end
  end

阿贾克斯:

 $(document).on('ajax:success', function (evt, data, status, xhr) {
    // Insert new images into hidden div
    $('.battle-inner:eq(1)').replaceWith(data);

    $('.battle-inner:eq(1)').imagesLoaded()
        .done(function () {
             // Remove old images
            $('.battle-wrapper:eq(0)').remove();

            // Div with new images moves up in DOM, display
            $('.battle-wrapper:eq(0)').show();

            // Hide Spinner
            $('#spinner-overlay').hide();
    });

_battle_form:

<div class="grid battle-inner">
  <%= semantic_form_for :battle, :remote => true, :url => thisorthat_result_path do |form| %>
      <% @images.each do |image| %>
      <div class="battle-image-wrap grid__cell">
      </div>
      <% end %>
 <% end %>
</div>

【问题讨论】:

    标签: javascript ruby-on-rails ajax ruby-on-rails-5.1 responders


    【解决方案1】:

    你的请求是作为 JS 处理的吗?

    尝试将format.html 替换为format.js

    【讨论】:

    • 是的,我的请求正在处理中。在调试器中,我可以看到流经 javascript 的控件,但 data 参数未定义。使用 rails4 也是如此。与 format.js 的行为相同
    【解决方案2】:

    这是 jquery-ujs 的一个问题,它不再依赖于 rails>5.1。需要使用 rails-ujs 依赖。

    https://blog.bigbinary.com/2017/06/20/rails-5-1-has-dropped-dependency-on-jquery-from-the-default-stack.html

    //从响应中读取数据

    .on('ajax:error', function(event) {
        var detail = event.detail;
        var data = detail[0], status = detail[1],  xhr = detail[2];
        // ...
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 2011-05-26
      • 2014-02-14
      • 1970-01-01
      相关资源
      最近更新 更多