代码之家  ›  专栏  ›  技术社区  ›  Kieran Senior

使用GET请求的多步骤表单

  •  0
  • Kieran Senior  · 技术社区  · 15 年前

    通过GET请求,我们有一个多步骤表单的特殊要求。因此,我们使用get请求将新参数传递给查询,而不是发布表单。所以,基本的想法是有一个处理方法,一个传递给查询的日期。三步走的形式,如果你愿意的话。

    1. 显示可用的疗程,选择一个疗程
    2. 显示可用日期(后台有业务逻辑来计算这些日期)
    3. 挑选时间

    该URL将经历以下状态

    1. 网站:com/bookings/new
    2. site.com/bookings/new/[id name兘treatment](我的意思是,它可以通过id字段或治疗的名称)
    3. site.com/bookings/new/[id name俬treatment]/2010-12-12/

    所以,我的路线是这样的:

    map.connect 'bookings/new/:massage_type/:date', :controller => :bookings, :action => :new
    

    按摩类型是治疗ID的同义词。

    所以我的表单标记如下:

    <% form_tag( {:action => "new"}, :method => "get" ) do %>
    

    我遇到的问题是,我只想让它返回url site.com/bookings/new/[id name of treatment]/但它返回以下url:

    http://localhost:3000/bookings/new?massage_type[treatment_id]=1&commit=actionnew
    

    我想没人知道?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Franci Penov    15 年前

    使用的窗体 GET 正在添加输入值作为查询参数。无法将表单发布到另一个URL,而输入值是URL的一部分-HTML标准不支持它。

    您可以使用url rewrite将此类型的传入URL重新映射到您想要的URL,但是这并不是一个很好的解决方案,因为这将导致第二个请求。

    但是,我不明白为什么表单需要这样做 得到 到那个特定的URL。是否要求用户可以手动构造这些URL,而不是使用表单?

    如果没有这样的要求,我建议使用标准 POST 形式到 http://localhost:3000/bookings/new 并根据响应中的参数修改表单 身体,必要时。

    更好的是,编写一些Ajax,根据用户的选择更新表单,而不进行完整的表单提交,直到用户完成所有选择。

        2
  •  0
  •   We Are All Monica    15 年前

    根据定义, GET 请求将具有查询字符串( ?param1=value1&param2=value2&... )在其URL中。为了摆脱这些,你要么开始使用 POST 或者在收到 得到 请求。

    我更喜欢重定向方法,因为它不会显示关于用户刷新浏览器时重新提交post数据的令人困惑/恼人的消息。