【问题标题】:render an action from clicking a button without reloading page: Ajax通过单击按钮而不重新加载页面来呈现动作:Ajax
【发布时间】:2016-12-05 13:54:21
【问题描述】:

我使用 ajax 在点击时执行控制器操作而不重新加载页面。我似乎无法渲染 js 视图。

transactions_controller:

require "braintree"

    def index   
       @reservations = Reservation.where("transaction_id = transaction_id", true)

    end

    def escrow
        @reservation = Reservation.find(params[:id])
        @escrow = Braintree::Transaction.release_from_escrow(@reservation.transaction_id)
        @reservation.update_attributes pay_completed: true
        respond_to do |format|
            format.html
            format.js { render :layout=>false }
        end 
    end

    private
    def reservation
        @reservation = Reservation.find(params[:id])
    end

我在 index.html.erb 上的链接:

<% @reservations.each do |reservation| %>
			<% @transaction = Braintree::Transaction.find(reservation.transaction_id) %>
			
  
  <tr>
  <td><%= reservation.id %></td>
    <td><%= reservation.transaction_id %></td>
    <td><%= reservation.reviser.user.username %></td>

    <td><%= reservation.user.username %></td>
    <td><%= @transaction.status %></td>
    <td><%= @transaction.escrow_status %></td>
    <td><%= reservation.created_at %></td>
    <td><%= reservation.completed %></td>
<td><%= link_to "stock", escrow_path(reservation), :remote => true %></td>
    
  </tr>
  
			

			

			

			<% end %>

routes.rb:

get 'admin/transactions' => 'admin/transactions#index' 
patch 'admin/transactions/:id' => 'admin/transactions#escrow', :as => 'escrow'

escrow.js:

$('#escrow').html("<%= j (render @escrow) %>");

我不知道我做错了什么!谢谢! :)

【问题讨论】:

    标签: javascript jquery html ruby-on-rails ajax


    【解决方案1】:

    不是答案,而是关于从这里去哪里的建议:

    您需要从这里开始缩小问题发生的范围。您知道,当您单击链接时,它不会执行您想要的操作。现在,一步一步来,看看哪里出了问题。使用以下答案更新您的问题:

    1. 如果关闭 ajax (remote => false) 是否有效?

    现在,打开 ajax:

    1. 单击链接是否会向服务器发送请求? (使用 Chrome 开发工具检查)请求是否符合您的预期?
    2. 您的 Rails 服务器是否收到任何类型的请求?单击链接后查看日志,看看是否发生了任何事情。如果有,那是什么?它看起来像是一个成功的请求吗?
    3. 如果只是将 escrow.js 中的代码替换为简单的alert('got here');,它会执行吗?

    【讨论】:

    • 在我的日志中当我点击时我得到 app/admin/transactions.rb:26:in block in escrow' app/admin/transactions.rb:25:in escrow'
    【解决方案2】:

    你可以试试这样的:

    # escrow.js.erb
    var html = "<%= escape_javascript(render partial: 'escrow', locals: { escrow_var: @escrow } ) %>"
    $('#escrow').html(html);
    

    您应该有一个名为 _escrow.html.erb 的部分,并在部分中使用 escrow_var 而不是 @scrow

    当然,您可以使用任何其他名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 1970-01-01
      • 2016-10-01
      • 2019-07-20
      • 2023-03-13
      相关资源
      最近更新 更多