Sinatra发布重定向get,总是转发到与post相同的get

时间:2016-02-05 01:43:16

标签: redirect sinatra

这是我的代码:

post '/pathA' do
  redirect '/pathB'
end

get '/pathB' do
  do something
end

get '/pathA' do
  do something
end

首先,如果我没有在postA中指定重定向,它将重定向到getA,我不会理解这一点;现在,我想重定向到getB,结果如下:

127.0.0.1  "POST /pathA HTTP/1.1" 303 - 0.0330
127.0.0.1  "GET /pathB HTTP/1.1" 200 15877 0.0229
127.0.0.1  "GET /pathA HTTP/1.1" 200 26017 0.0281
127.0.0.1  "GET /css/reset.css HTTP/1.1" 304 - 0.0020
......(some more resources)

getB中的代码不会被执行。 getA页面正在显示。这会怎么样?如何重定向到getB?

我认为问题是我使用ajax发送帖子请求。

2 个答案:

答案 0 :(得分:0)

解决此问题的两种方法:

  1. 更改postA以返回通知程序但不是重定向,并根据通知程序从ajax代码重定向。
  2. 从表格发布。

答案 1 :(得分:0)

如果你在ajax返回成功后使用重载功能,显然你将拥有执行ajax的相同路径。

在ajax返回成功后,您可以发布到新的路径/网址,或者重定向它:

样本伪代码:

$('#my_form').submit( function(event){      //or

$('#btn_submit').click( function(event){
  event.preventDefault();

  $.ajax({
    url: 'http://my_path',
    type: 'POST', #GET
    data:  $('#my_form').serialize(),
    success: function(data){
      // redirect_to_new_path
    }
  });
});

以您希望函数执行的方式更改代码。