【问题标题】:How to submit form with GET method and using URI template?如何使用 GET 方法和使用 URI 模板提交表单?
【发布时间】:2013-03-12 14:17:55
【问题描述】:

我阅读了这篇关于 URI 模板的文章 http://blog.welldesignedurls.org/2007/01/11/proposing-uri-templates-for-webforms-2/,但它似乎是一个死项目。

那么有什么办法可以提交这样的表格吗?

<form action="/orders/{id}" method="get">
    <input type="text" name="id"/>
    <input type="submit" value="Submit"/>
</form>

提交后的表单转发到奇数url:/orders/%7Bid%7D?id=1

【问题讨论】:

    标签: html forms rest


    【解决方案1】:

    您可以使用 GET 方法,但您将在 URL 中获取名称-值对,并且它不会拾取模板。如果你在这个表格中输入“5”:

    <form action="/orders" method="get">
        <input type="text" name="id"/>
        <input type="submit" value="Submit"/>
    </form>
    

    提交时,您将获得 URL /orders?id=5,而不是 /orders/5。

    如果您正在寻找 /orders/5,可以使用一些 jquery 轻松完成:

    <script type="text/javascript" language="javascript">
    $("form").submit(function () {
        // prevent the default GET form behavior (name-value pairs)
        event.preventDefault();
    
        // Get the action attribute
        var action = $("form").attr("action").toLowerCase();
    
        // For each form element found, replace {elementName} in the action attribute to build a URL from template
        var values = $("form").serialize().split("&");
        for (var i = 0; i < values.length; i++) {
            var tokens = values[i].split("=");
            action = action.replace("{" + tokens[0].toLowerCase() + "}", tokens[1]);
        }
    
        // Send the user off to the URL w/ template elements replaced
        window.location.href = action;
    });
    </script>
    

    您可能必须添加一些转义,并在模板输入不可用时处理条件,并且可能测试一些其他边缘情况,但上述代码适用于具有任意数量模板元素的基本情况,并且会带你到上面的 /orders/5。

    【讨论】:

      【解决方案2】:

      您忘记关闭action 属性。

      <form action="/orders/{id}" method="get">
          <input type="text" name="id"/>
          <input type="submit" value="Submit"/>
      </form>
      

      如果要传递{},请使用escape() 函数。

      示例

      $queryString = "/orders/{id}";
      $safeQueryString = escape( $queryString );
      
      <form action="<?=$safeQueryString?>" method="get">
      

      传递表单 ID

      $('input[type="submit"]').on('click',function(e)
      {
          e.preventDefault();
          var forms = $(this).parents('form');
          var formID = forms.attr('id');
      
          //appending form id to form action
          var dataString = forms.serialize()+'&formID='+formID;
      
          forms.submit();
      
      });
      

      【讨论】:

      • action 属性打错了,我修正了。
      • @Harry 所以还是有同样的问题..?
      • 其实我想提交一个表单,ID是从输入中输入的,而不是渲染表单的特定ID
      • @Harry 你需要创建提交按钮点击事件然后将表单ID传递给表单操作然后提交表单..
      猜你喜欢
      • 1970-01-01
      • 2015-02-10
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 2011-07-18
      • 2011-06-16
      相关资源
      最近更新 更多