2

リクエスト「POST /」の場合 [application/x-www-form-urlencoded の解析中にエラーが発生しました]

このエラーはIEでのみ発生します。他のすべてのブラウザーは、泣き虫になることなくそれを処理します。このエラーを Google で検索しようとしましたが、役立つ情報が見つかりませんでした。それを避けるために何をすべきか考えていますか?たぶん、私が知らないフレームワークの一般的な使用で何か間違っているのでしょうか?

4

4 に答える 4

1

OK、Play をデバッグしました。ソースと、このエラーの原因となるコードを見つけました。ContentTypes.scalaのdef tolerantFormUrlEncodedメソッドです NoSuchElementException がスローされ、これは非終了が原因でした<input type="hidden"

そのため、フォームを確認することをお勧めします。

于 2013-02-14T11:15:23.020 に答える
0

制御された環境 (単純なフォームと PHP サーバーを使用) でこの動作を再現することができました。IE では発生しましたが、Chrome では発生しませんでした (Firefox や Safari はテストしていません)。問題は、Play のフォーム データの処理の一部にすぎません。

原因は次のとおりです。IE は、すべてのフォーム フィールドを name 属性 (空であろうとなかろうと) でまとめて、投稿データに入れているようです。これは、name 属性が空のフォーム要素 ( name="") が表示されることを意味します。これは、「成功したコントロール」 ( http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2 )の考え方に基づいています。「コントロール名」を持つことは、名前属性が存在することを意味するのか、それとも空でない値を持つ名前属性を持つことを意味するのかについて、仕様は(私が見つけたものから)不明です。IE はこれを文字通り受け取ってすべてを収集するようですが、他の人は追加の手順を実行して空の名前のコントロールを除外します。

次のサンプル フォームがあるとします。

<form action="<?= $_SERVER['PHP_SELF']?>" method="POST">
    <label>
        Name
        <input name="name"/>
    </label>
    <label>
        Email
        <input name="email"/>
    </label>
    <button type="submit" name="">Send 1</button>
</form>

IE9 では&=Send、POST データに追加されました。IE10/11では&=、最後に前述の結果になりました。記録のために、タグの内容ではなく<button>明示的な属性を送信することになっています。value

ただし、私たちの場合 (私は kflorence の同僚であり、コードベースでこれを見て新鮮な目で見ました)、HTML はブラウザーにヒットしたときにクリーンでした。slohr が言ったこと ( https://stackoverflow.com/a/23529360/2684520 ) は、私たちを悩ませていたものです。

nameそのため、空の属性がないかフォーム HTML を確認してください。それがクリーンな場合は、フォームの送信時またはボタンのクリック時に、JS が問題のあるフィールドを挿入したり、フィールドを変更したりする可能性があります。フォームの HTML がクリーンな場合、このバグは影響しません。

于 2014-10-06T22:27:25.620 に答える