如何从控制器返回一个php值来查看,通过AJAX请求路由?

时间:2017-02-16 23:53:37

标签: javascript php ajax laravel

这是我在视图中调用控制器的ajax函数。

<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>

这是我的控制器功能,由我的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);
}

我希望变量在下拉列表中返回:

<select class="inner right-align">
    <option value="" disabled selected>Choose your option</option>  
    <option>{{ $no_rooms }}</option>             
</select>

3 个答案:

答案 0 :(得分:0)

检查您的代码,您必须记住几件事

在控制器中,返回包含信息的数组

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];
}
HTML中的

添加csrf令牌

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

定义一个选择器:

<select id="your-selector" class="inner right-align">
    <option value="" disabled selected>Choose your option</option>  
</select>
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();
});

我希望它能带来好运

答案 1 :(得分:0)

使用{{url('/rooms/'.$roomtype->type_id)}}并添加data : {"_token": "{{ csrf_token() }}"} 在你的ajax网址。

并在控制器中更改return语句,如下所示

return Response::json($no_rooms);

答案 2 :(得分:0)

在您的控制器中

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

在你的ajax中

在类型:“GET”或类似的任何地方

之后添加此dataType:“json”
$ajax({
   type: "get",
   dataType: "json"

在你的ajax成功解析数据

   success:function(data){
      console.log(data.rooms)
   }