Esta es mi función ajax a la vista llamando al controlador.

<script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
            type: "get",
            url: '/rooms/{{ $roomtype->type_id }}',
            data: "",
            success: function(data) {
                console.log(data);
                //var str = "<option value="+data+">"+data+"</option>";
                //console.log(str);
                //$( "select" ).append(  str  );
                //$( ".inner" ).append( str );
            }
        })
    });
</script>

Esta es mi función de controlador llamada desde mi vista ajax

public function numberOfRooms($type_id, Request $request) {
    $room_model = new room;
    // $request->session()->forget('no_rooms');
    //$request->session()->regenerate();
    $no_rooms = $room_model - > where('type_id', '=', $type_id) - > get() - > count();
    //$request->session()->put('no_rooms', $no_rooms);
    return back() - > with($no_rooms);
}

Quiero que la variable se devuelva aquí dentro de un menú desplegable:

<select class="inner right-align">
    <option value="" disabled selected>Choose your option</option>  
    <option>{{ $no_rooms }}</option>             
</select>
0
jean9 17 feb. 2017 a las 02:53

3 respuestas

La mejor respuesta

Verifique su código, hay varias cosas que debe tener en cuenta

En el controlador, devuelve una matriz con la información

public function numberOfRooms(Request $request, $type_id)
{
    $room_model = new room;
    $no_rooms = $room_model->where('type_id', '=', $type_id)->get()->count();
    return [ 'rooms' => $no_rooms];
}

En HTML, agregue el token csrf

<html>
    <head>
        ...
        <meta name="csrf-token" content="{{ csrf_token() }}" />
        ...

Definir un selector:

<select id="your-selector" class="inner right-align">
    <option value="" disabled selected>Choose your option</option>  
</select>

En JS

$(document).ready(function(){
    $.ajaxSetup({
        headers : {
            'X-CSRF-TOKEN' : $('meta[name="csrf-token"]').attr('content')
        },
    });
    function loadRoom(){
        $.ajax({
            type: "get",
            url: '/rooms/{{ $roomtype->type_id }}',
            data: "",
            success: function(data) {
                for (room in data.rooms) {
                    $('#your-selector').append($('<option>', {
                        value: room.id,
                        text: room.name
                    }));
                }
            }
        })
    }

    loadRoom();
});

Espero que funcione buena suerte

0
Manuel Temple 17 feb. 2017 a las 02:32

En su controlador

return array(
   'rooms' => $rooms
  );

En tu ajax

Agregue este tipo de datos: "json" después del tipo: "GET" o en cualquier lugar como este

$ajax({
   type: "get",
   dataType: "json"

Y en su éxito ajax analice los datos

   success:function(data){
      console.log(data.rooms)
   }
0
flo lab 17 feb. 2017 a las 07:34

Use {{url('/rooms/'.$roomtype->type_id)}} y agregue data : {"_token": "{{ csrf_token() }}"} en su url ajax.

Y cambie la declaración de devolución en su controlador de esta manera

return Response::json($no_rooms);
0
Divyank 17 feb. 2017 a las 04:40