2017-01-02 4 views
0

私はLaravel 5.2を使用して他の人のコードを操作していますが、サーバー側にフォーム値を格納するために必要なフィールドがありません。私は新しい隠し入力フィールドを追加し、次のコードで値を設定しました。変更なしで終了せずに新しいページにユーザーをリダイレクトする方法

<form method="POST"> 
    <input type="hidden" value="" id="hidden_field" /> 
    <input type="submit" class='action_button' data-action='save' /> 
</form> 

$('.action_button').on('click', function(event) { 
    event.preventDefault(); 
    $('#hidden_field').val($(this).data('action'); 
    $('#form').submit(); 
}); 

フォームが送信され、データはサーバー側に保存され、コントローラーの最後には次のコードがあります。

return redirect(url('home')); 

私はいくつかの変更を行い、フォームを送信しようとするたびロジックは現在、正常に動作しているサーバ側は、リダイレクトするようにブラウザに指示が、ブラウザはそれを保存せずに終了し、プロンプト私を示して、私は未保存の変更を持っていると思いますがまたは滞在する。プロンプトを完全に無効にすることなく、どうすればそれを回避できますか?

+0

なぜページが読み込まれたときに非表示の入力を変更しないでください。送信をクリックしたときではありません。フォームには複数のアクションボタンがあり、どのボタンがクリックされたかを判断してそれに応じてアクションを送信する必要があるので、それは 'Js'の問題 –

+0

だと思います。 – Anfal

+0

ajaxを使用するとどうなりますか? – Mephiztopheles

答えて

1

長時間のデバッグ後に問題が解決され、ページ上のすべての入力ボタンに対してwindow.onbeforeunloadのグローバルなJSファイルが原因でエラーが発生しました。私は のためにこれを投稿しています。次のようにクリック機能があることを確認してください。

$('.action_button').on('click', function(event) { 
    event.preventDefault(); 
    window.onbeforeunload = null; 
    $('#hidden_field').val($(this).data('action'); 
    $('#form').submit(); 
}); 
+1

記録のために、 'onbeforeunload'はブラウザのデフォルト機能ではありませんでした。最初に、コードにハンドラを積極的に追加しない限り、この問題に直面することはありません(この場合は、他の同僚でした)。 –

0

ブラウザには、の投稿方法を使用しているとのメッセージが表示されます。私はそれがFirefoxでのプロンプトだと思うが、Google Chromeではない。

解決策はの方法を取得するためにの投稿を変更することです。もちろん、データを投稿している場合は、そのようにすべきではありません。あなたはまた、いくつかのJavaScriptコードを使用しようとするかもしれませんが、私が非常に似た問題に直面していたとき、それは助けになりませんでした。

+0

私はポストの代わりにフォームを使うのは、ポストリクエストを受け入れるルート上の良い考えだとは思わない。 – Anfal

+0

それは当てはまりません。おそらく、ブラウザの履歴をブラウズしたときに表示される「Repost form data」について考えているでしょう。 –

+0

@Anfalもしそれがポストルートでなければならないなら、私の解決策はあなたには良いことではありません。人々が間違って投稿を選択してルートを取得することがあるため、その理由を私はあなたに提案しました。 –

関連する問題