2016-10-04 37 views
2

私はLaravelを初めて使用しています。最初のドロップダウンボックスで選択された内容に応じて2番目のドロップダウンボックスが変更される動的なドロップダウンボックスを作成する方法を学習しようとしています。ここでAJAXファイルを使用したLaravelルート

は私のブレードファイル内の自分のフォームコードです:ここで

{!! Form::open(array('url'=>'', 'files'=>true)) !!} 
    <label>Select a Cinema:</label><br> 
    <select id = "cinema" name = "cinema"> 
     @foreach ($cinemas as $cinema) 
      <option value="{{$cinema->id}}">{{$cinema->name}}</option> 
     @endforeach 
    </select> 
    <br> 
    <label>Select a session:</label> 
    <br> 
    <select id = "sesh" name = "sesh"> 
     <option value=""></option> 
    </select> 
    <br> 
    <label>Number of tickets:</label><br> 
    <select id = "count" name ="count"> 
     @for ($i = 1; $i < 10; $i++) 
      <option value="{{$i}}">{{$i}}</option> 
     @endfor 
    </select> 
    <br><br> 
    <input type="submit" value="Submit"> 
{!!Form::close()!!} 

は(もブレードファイル内が、<script>タグの私のAJAXコードです:

<script> 
    $('#cinema').on('change', function(e){ 
    console.log(e) 
    window.alert("On Change"); 
    var cinema_id = e.target.value; 



    //ajax 
    $.get('/ajax-subcat?cinema_id=' + cinema_id, function(data){ 
    //success data 
    console.log(data); 
    window.alert("On Success"); 
    $('#sesh').empty(); 
    $.each(data, function(index, subcatObj){ 
     $('#sesh').append('<option value=""' + subcatObj.id +'">'+subcatObj.name+'</option>'); 
    }); 
    }); 
    }); 

</script> 

そして最後に、ここでは私のルートであります:

Route::get('/ajax-subcat', function(){ 
    $cinema_id = Input::get('cinema_id'); 
    $sessions = Session::where('cinema_id', '=', $cinema_id)->get(); 
    return Response::json($sessions); 
}); 

このコードではデータが生成されず、404エラーが表示されます。

私はAJAXコードがアラートを介して「変更」機能の中に入ることを確認しましたが、2番目のアラートは表示されません。私の限られた理解では、ルートファイルに問題があるように感じます。ルートファイルがデータを返すように、AJAXの次の関数が実行されているはずです。

私がルートコードで理解できないことは、Input :: get( 'cinema_id')が行っていることです。私はそれがドロップダウンボックスでユーザーが入力したものをつかんでいると思いますか?

+0

は、どのルートグループ内に位置し、あなたのルート "/ AJAX-SUBCAT" となっていますか? – hamedmehryar

+0

私が知っているわけではありませんが、あなたはどういうことを本当に申し訳ありませんか?これを置くことを意味しますか?Route :: get( '/ ajax-subcat'); Route :: groupセクションの内側にありますか? –

+0

はい、あなたのルートはRoute :: group()の中に置かれていますか? – hamedmehryar

答えて

1

404エラーが出ているので、私は完全なURLを使用してこれを解決することを願っています。あなたのAJAX呼び出し

headers : { 
    'csrftoken' : '{{ csrf_token() }}' 
} 
+0

これは何かをしたようです!クラス入力が見つからないというバグがありました。 クラス入力を定義する必要はありますか?または、おそらくどこかにそれを含める?少なくとも私はそのルートに入ったことを知っている!どうもありがとうございました!! –

+0

私はちょうどこれを含む必要がありました: イルミネーション\サポート\ファサード\入力; 大変ありがとうございます。このケースは閉鎖されています。 –

+0

ありがとうございました。入力を頻繁に使用する必要がある場合は、入力ファサードをconfig/app.phpの別名配列に直接追加することができます。この方法で、Inputを使用するたびに追加する必要はありません。同様に ''入力' =>イルミネーション\サポート\ファサード\入力::クラス、 ' –

0

追加ヘッダを使用してAJAXでこれを追加し

headers: { 
    'X-CSRF-Token':{{ csrf_token() }}, 
}, 
0

変更

uploadUrl: '{{route("product/create")}}', 

uploadUrl: '{{url("product/create")}}', 

にして

//ajax 
$.get('{{ url('/ajax-subcat') }}?cinema_id=' + cinema_id, function(data){ 
    //success data 
+0

あなたは間違ったスレッドに返信したことがありますか?私はuploadURLを持っているとは思わない: –

0

ここではいくつかのことが起こっているようです。 Laravelを使用してサーバー上で、そしてJavascriptを使用してクライアントで何が起こっているのかを分けることは重要です。

SERVER
データを含むフォームを送信します。このように使用するブレード構文。

@foreach ($cinemas as $cinema) 
    <option value="{{$cinema->id}}">{{$cinema->name}}</option> 
@endforeach 

クライアントに送信される前にサーバーにレンダリングされます。これは、ページをロードするときに最初のドロップダウンにデータが入力される方法です。

CLIENT

は、あなたが最初のドロップダウンからユーザーの選択に基づいて要求をするためにAJAXを使用しているように見えます。この行:

$.get('/ajax-subcat?cinema_id=' + cinema_id, ... 

質問の文字列とともにお客様のRoute::get('/ajax-subcat', ...にビルドリクエストを行っていますか。 ?cinema_id = 1Input::get('cinema_id');は、クエリ文字列()の値をとる必要があります。

正しくルートを設定したようですので、var cinema_id = e.target.value;の問題を考えています。私はそれが要求が行われる前にそれが価値であることを確認し、サーバ上のあなたのクエリが必要とする値と並んでいることを確認します。

クライアントのvar cinema_idの値は、クエリのサーバーで$cinema_idの値になります。

・ホープ、このことができます、

マット

関連する問題