Rails AJAX - 不要重定向或渲染



使用 rails 和 .js.erb 发出 AJAX 请求(并将值附加到div),如何防止呈现新布局?换句话说,保持在同一页面上而不去任何地方,只需将来自服务器的新数据附加到div 中。无需重新加载同一页面,无需重定向。

目前我的控制器看起来像这样

  def update_shipping
    @order = Order.find(params[:id])
    @order.shipping_option_id = params[:shipping_options]
    @order.save!
    respond_to do |format|
      format.js
      format.html
    end
  end

和我的形式像齐斯:

        <%= form_tag update_shipping_order_path(@order), method: :put, remote: true do %>
          <%= select_tag 'shipping_options', @options_for_select, onchange: 'this.form.submit()' %>
        <% end %>

我的路线看起来像这样:

resources :orders do
  member do
    put :update_shipping
  end
end

但是我收到"缺少模板"错误

请帮忙!!

您需要在

app/views/your_controller/目录下添加一个update_shipping.js.erb文件。请注意,javascript 文件的名称应与操作相同。由于您的表单中有remote:true,因此 rails 将尝试在您的情况下呈现 javascript 模板update_shipping.js.erb

现在在你的update_shipping.js.erb文件中编写一些基本的javascript来更新页面元素,如

#update_shipping.js.erb
$('.some-div').html(<%=j @model.some_value' %>)

试试这个:-

respond_to do |format|
          format.js { render :nothing => true }
          format.html
        end

如果您不想渲染布局,可以使用如下所示!request.xhr?

respond_to do |format|
    format.html { layout: !request.xhr? }
    format.js 
end

如果你想让你的 ajax 驱动的 JS 触发,你只需要调用你的.js.erb文件与你的视图相同:

#app/views/controller/update_shipping.js.erb
alert("This JS is returned & fired after the Ajax request");

你最好在你的routes.rb这样做:

resources :orders do
    put :update_shipping
end

有点晚了,我遇到了这个搜索相同的问题。在使用动作电缆时,它一定在某个时候从我的脑海中溜走了,但需要的是 http 响应代码 no_content。HTTP 响应代码告诉浏览器在返回请求时如何操作。这是指向它们列表的链接,以及它们在轨道中的符号。更多关于 204 无内容

下面是它的外观:

def update_shipping
    @order = Order.find(params[:id])
    @order.shipping_option_id = params[:shipping_options]
    @order.save!
    head :no_content #or head 204
end

编辑:为我解决解决方案的是威廉丹尼斯在此堆栈溢出问题中提供的链接

相关内容

  • 没有找到相关文章

最新更新