7

URIテンプレートに関するこの記事http://blog.welldesignedurls.org/2007/01/11/proposed-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

4

2 に答える 2

6

GET メソッドを使用できますが、URL で名前と値のペアを取得し、テンプレートを取得しません。このフォームに「5」と入力すると、次のようになります。

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

送信すると、URL は /orders/5 ではなく /orders?id=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 に。

于 2013-03-12T04:06:40.593 に答える
1

You forget to close the action attribute.

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

and for passing {} use the escape() function.

Example

$queryString = "/orders/{id}";
$safeQueryString = escape( $queryString );

<form action="<?=$safeQueryString?>" method="get">

Pass Form 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();

});
于 2013-03-12T03:33:45.130 に答える