同僚がハマっていたのでヘルプで入って見たらこうなってたよ っていうメモ
#問題
コントローラーで保存したはずのリクエストセッションが取得出来ない。
(そもそも保存出来てない?)
##コード
@extends('base')
@section('content')
<form>
<input type="text" name="name">
<input type="text" name="age">
<button type="button" onclick="postNext()">Next</button>
</form>
@endsection
@section('js')
<script type="text/javascript" src="js/hoge.js"></script>
@endsection
function postNext() {
$('form').attr('action', postUrl);
$('form').submit();
}
色々と端折っているものの、正常に動く形です。
#原因
chromeのdeveloper toolsでNextを押下した時のNetworkタブを確認していたら画面遷移直前でerrorのpostを発見。
継承しているbase.blade.php
の中に<form> ~ </form>
が存在していた。
その状態でタグ指定でsubmitしていたため、正常なsubmitと不正なsubmitを同時に行っていた。
(成功するパターンもあったのが、ここら辺の判断をどうやっているかまでは追っていない)
#修正
本来postされるべきformにIDを付けてJSファイルをタグ指定ではなく、ID指定でsubmitするようにした。
#あとがき
同僚がなぜこのような実装したかまでは言及していない。(めちゃくちゃ切迫したスケジュールの中で頑張ってるので聞けなかった)
個人的にはjsでsubmit記述する必要があるのかな?とも思った。
submit前に処理を入れたかったとしても以下の形で良い気がする
$('#hoge_form').submit(function() {
~
});
あんまりこういう事はないと思うけど、一体験談として。