【问题标题】:How to display the details about the selected option of a select box in Laravel using Blade?如何使用 Blade 在 Laravel 中显示有关选择框的选定选项的详细信息?
【发布时间】:2023-03-29 03:42:01
【问题描述】:

我是 Laravel 新手 我是如何设法在选择框中显示数据库内容的。我想要的是,我需要根据在选择框中选择的 ID 从另一个表中获取数据。我的代码如下所示

刀片

<h2 class="comment-listings">Subscriber listings</h2><hr>
<table>
    <thead>
    <tr>
        <th>Slelect a List:</th>
        
        <th><select class="form-control input" name="list1s" id="list1s" >
            <option selected disabled>Please select one option</option>
            @foreach($list1s as $list1)
                <option value="{{$list1->id}}">{{$list1->name}}</option>
            @endforeach
            </select>
           
            </th>
      </tr>
    </thead>
</table>
<table>
    <thead>
    
    <tr>
        <th>Device ID</th>        
        <th>Status</th>
        <th>Delete</th> 
    </tr>
    </thead>
    <tbody>
    @foreach($subscribers as $subscriber)
    <tr>
        <td>{{{$subscriber->device_id}}}</td>                
        <td>{{$subscriber->list1->name}}</td>
        <td>

            {{Form::open(['route'=>['subscriber.update',$subscriber->id]])}}
            {{Form::select('status',['approved'=>'Approved','blocked'=>'Blocked'],$subscriber->status,['style'=>'margin-bottom:0','onchange'=>'submit()'])}}
            {{Form::close()}}
        </td>
        <td>{{HTML::linkRoute('subscriber.delete','Delete',$subscriber->id)}}</td>
        
    </tr>
    @endforeach

    </tbody>
</table>
<script>
$('#list1s').on('change',function(e){
    console.log(e);
    var list_id = e.target.value;

    $.get('/subscriber/get?list_id=' + list_id, function(data){
        console.log(data);
    })
})
</script>
{{$subscribers->links()}}

用于填充选择框的控制器

public function listList()
{
    $list1s = List1::all();
    $this->layout->title = 'Subscriber Listings';
    $this->layout->main = View::make('dash')->nest('content', 'subscribers.list', compact('list1s'));
    $subscribers = Subscriber::orderBy('id', 'desc')->paginate(20);
    View::share('subscribers', $subscribers);
}

这会显示所有列表和订阅者。 由于我需要显示在选择框中选择的列表的订阅者,我在 Blade 底部添加了一个脚本,并在路由中添加了其他控制器功能,以根据从脚本传递的 list_id 执行任务。

 Route::get('/subscriber/get', function(){
    $list_id = Input::get('list_id');
    $subscribers = Subscriber::where('list1_id','=', $list_id)->get();
    return Response::eloquent($subscribers);
});

但是没有发生任何变化,我哪里错了?

【问题讨论】:

    标签: javascript php jquery laravel laravel-4


    【解决方案1】:

    我已经编辑了我的代码,并且成功了。

    刀片

    <h2 class="comment-listings">Campaign listings</h2><hr>
    <script data-require="jquery@2.1.1" data-semver="2.1.1" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <table>
        <thead>
        <tr>
            <th>Select a List:</th>
            
            <th>
               <select class="form-control input" name="list1s" id="list1s" onchange="displayVals(this.value)">
                <option selected disabled>Please select a list</option>
                @foreach($list1s as $list1)
                    <option value="{{$list1->id}}">{{$list1->name}}</option>
                @endforeach
                </select>
               
                </th>
          </tr>
        </thead>
    </table>
        <div id="campaign">
        
        </div> 
    <script>
    function displayVals(data)
    {
        var val = data;
        $.ajax({
        type: "POST",
        url: "get",
        data: { id : val },
            success:function(campaigns)
            {
                $("#campaign").html(campaigns);
            }
        });
    }
    </script>

    路线

    Route::any('/campaigns/get', [
        'as' => '/campaigns/get', 
        'uses' => 'CampaignController@getCampaigns'
        ]);
    

    控制器

    public function getCampaigns()
    {
    $list1 = Input::get('id');
    $campaigns = Campaign::orderBy('id', 'desc')
    ->where('list1_id','=', $list1)
    ->where('user_id','=',Auth::user()->id)
    ->paginate(10);
    return View::make('campaigns.ajaxShow')->with('campaigns', $campaigns);
    }
    

    我现在有一个单独的刀片 (ajaxShow) 可以在选择框中的选项更改时加载。

    <table>
        <thead>
        <tr>
            <th>Campaign title</th>        
            <th>Status</th>
            <th>Delete</th> 
        </tr>
        </thead>
        <tbody>
    @foreach($campaigns as $campaign)
        <tr>
            <td>{{{$campaign->template->title}}}</td>                
            <td>
    
                {{Form::open(['route'=>['campaign.update',$campaign->id]])}}
                {{Form::select('status',['yes'=>'Running','no'=>'Stoped'],$campaign->running,['style'=>'margin-bottom:0','onchange'=>'submit()'])}}
                {{Form::close()}}
            </td>
            <td>{{HTML::linkRoute('campaign.delete','Delete',$campaign->id)}}</td>
        </tr>
        @endforeach
    </tbody>
    </table>
    {{$campaigns->links()}}

    【讨论】:

      【解决方案2】:

      在 Laravel 4 及更高版本的 Illuminate\Http\Response 中没有实现 eloquent 方法(我相信该方法仅在 Laravel 3 中可用)。但是您可以改为返回 json 响应:

      Route::get('/subscriber/list', function(){
          $list_id = Input::get('list_id');
          $subscribers = Subscriber::where('list1_id','=', $list_id)->get();
      
          return Response::json($subscribers);
      });
      

      【讨论】:

      • 我已经改了。不过,当我选择一个列表时,结果保持不变。请您检查一下我在刀片文件中的脚本 @Bogdan 先生
      • 如果您直接访问/subscriber/list?list_id=1 的 URL(或任何有效的 ID)会得到什么响应?
      • 另外,您在响应回调中使用了console.log(data);,您是否检查了浏览器控制台以查看打印出的内容?
      • 恐怕脚本没有执行任何 URL 调用。
      • 就语法和逻辑而言,您的 JS 代码看起来不错(此 simplified test 使用您发布的 JS 代码,发送 AJAX 请求就好了)。您是否检查了控制台是否有任何可能干扰该脚本正确执行的错误(jQuery 是否已成功加载、其他 JS 脚本中的错误等)?
      猜你喜欢
      • 2011-08-01
      • 2016-03-24
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      相关资源
      最近更新 更多