2016-04-02 11 views
0

ページがajax経由で読み込まれるサイトをビルドしています。私はajax経由で投稿する連絡フォームを持っていますので、私の投稿ルートによるトリガーと思います。ページのナビゲーション投稿とページ上の投稿を区別して、競合しないようにするための最良の方法です。私のルートは、お問い合わせページLaravel - Ajax Powered Pagesまた、投稿の原因となるフォームがあります

Route::any('/contact', function(){ 
    return view('frontend.contact'); 
}); 

Route::post('/contact', array('as' => 'contactform.create', 'uses' => '[email protected]')); 

のためにこのようになり、私はページのAjaxのポストフォームAjaxのポストを区別しないどのように

{!! Form::open(array('url' => '/contact', 'route' => 'contactform.create', 'files' => false, 'method' => 'post', 'id'=>'updateform' ,'role'=>"form")) !!} 

<span class="input input--kozakura"> 
{!! Form::text('full_name', '', array('class' => 'full_name input__field input__field--kozakura')) !!} 
</span> 

<span class="input input--kozakura"> 
{!! Form::email('email', '[email protected]', array('class' => 'email input__field input__field--kozakura')) !!} 
</span> 

<span class="input input--kozakura"> 
{!! Form::text('current_website', 'www.lassiemarlowe.com', array('class' => 'current_website input__field input__field--kozakura')) !!} 
</span> 

<div class="submit-btn-wrapper"> 
{!! Form::submit('submit') !!} 
</div> 
{!! Form::close() !!} 

を次のようにフォームがレイア​​ウトされていますか?

答えて

0

置き、他の1の前のポスト定義:

Route::post('/contact', array('as' => 'contactform.create', 'uses' => '[email protected]')); 

Route::any('/contact', function(){ 

       return view('frontend.contact'); 

      }); 
+0

残念なことに、残念ながら、私はこの種のセットアップに関するドキュメントはまだありません。 –

+0

@HamburgersnHeroin問題を少し詳しく説明できますか? –

+0

基本的にページはajaxを介して読み込まれます。リンクをクリックするとjqueryによってそのrel値がポスト経由でURLに呼び出され、ページの内容がプルインされてセクションに挿入されます。問題は、独自のAjax投稿要求を行うフォームがあるため、連絡先ページに行くときです。 –

0

使用ルートグループは、あなたのルーティングを区別するための良い方法です。私の解決策はこのようなものです。

// all normal routes in website here 
Route::any('contact', function(){ 
    return view('frontend.contact'); // this will produce example.com/contact 
}); 

// all ajax call 
Route::group(['prefix' => 'ajax'], function() { 
    Route::post('contact', '[email protected]') // this will produce example.com/ajax/contact 
}); 

また、action( 'ControllerName @ methodName')を使用して、フォーム 'action'属性のURLを生成します。これは

が、ここでは詳しく見るあなたのrouter.phpファイルに基づいて動的に変更されます:問題があること二つの経路ではないように見える@ AngadDubeyの答え(ポスト上の最新のコメントから https://laravel.com/docs/5.2/routing#route-groups https://laravel.com/docs/5.2/helpers#method-action

0

をし、 any)は競合していますが、AJAX XHR POSTと通常のブラウザフォームのHTTP POSTを処理するには、実際には2つの異なるハンドラが必要です。

これは、フォームが同様に処理されますが、エラーや成功メッセージを返す方法は、状況によって異なります。

私は実際にそれらを分けてはいけないと言いますが、代わりに何かを返す必要があるときに、その行動に何らかの検出を加えます。通常のフォームとAJAXフォームが同じでなければならないので、POST入力を通常通り処理しますが、応答を返す場合は、app('request')->ajax()のようなものを使用して、リクエストがXHRを経由したものかどうかを判断します。

また、同じ検証と処理コードを使用して処理できない場合は、同じ検出を使用して処理を分割できます。

関連する問題