在ajax请求后重定向

时间:2019-05-31 17:22:01

标签: jquery ruby-on-rails ajax

我已经阅读了很多有关Rails如何处理remote: true的帖子,但是我仍然不明白为什么会这样。我的表单之一是远程表单,如下所示:

<%= form_with model: @transfer, scope: :transfer, url: transfers_path, method: 'post', remote: true do |f| %>

在我的create动作中,我只有这个:

def create
  @transfer = @account.transfers.build(transfer_params)
  respond_to do |format|
    if @transfer.valid?
      format.html { redirect_to pending_transactions_path }
    else
      flash.now[:error] = "An error occurred"
      format.js
    end
  end
end

在保存create.js.erb时出错时,严格使用@transfer模板进行处理,我也尝试不使用代码将其清空。出于某种原因,当我提交此表单时,确实将我重定向到pending_transactions_path

但是,在我的代码的另一部分中,我有一个像这样的ajax请求:

$.ajax({
  method: "GET",
  url: "/handle_timeout"
});

我的控制器动作如下:

def handle_timeout
  respond_to do |format|
    format.html { redirect_to pending_transactions_path }
  end
end

由于某种原因,它没有重定向。在我的Rails日志中,我可以看到它正在重定向:

10:19:18 web.1     | Redirected to http://localhost:3000/transactions/pending
10:19:18 web.1     | Completed 302 Found in 67ms (ActiveRecord: 50.6ms)
10:19:18 web.1     | Started GET "/transactions/pending" for ::1 at 2019-05-31 10:19:18 -0700
10:19:18 web.1     | Processing by TransactionsController#pending_transfers as */*

我必须遵循另一个SO答案才能将其重定向。链接到该答案:https://stackoverflow.com/a/17689223/3504731

我认为remote: true与发出$.ajax请求相同吗?为什么在我提交第一个表单时页面会重定向,而在第二个ajax请求运行时却不重定向?与ajax请求相比,Rails的remote: true在幕后还能发挥更多魔力吗?

我正在运行Rails 5.2.1。任何对此的见解将不胜感激。谢谢您的阅读!

0 个答案:

没有答案