【问题标题】:Laravel chained dropdown selection using jquery ajax使用 jquery ajax 的 Laravel 链式下拉选择
【发布时间】:2018-08-31 13:18:32
【问题描述】:

我使用的是 laravel 5.6,我已经进行了下拉选择,但它不起作用。我在下拉菜单省份中选择了一个省份,但菜单城市没有显示城市数据。 这是我的控制器:

public function province()
      {
        $prov = Province::orderBy("provinsi.id","ASC")
                        ->pluck("name","id");
        return view('auth.register',compact('prov')); 
      }

public function cities($id)
      {
        $city = City::where("id_provinsi","=",$id)
                      ->pluck("city_name","id");
        return json_encode($city);
      }

这是我的路线:

Route:: get('/register', 'Auth\RegisterController@province');
Route:: get('/register/cities/{id}', 'Auth\RegisterController@cities');

这是我的看法:

<div class="form-group row">

 <label for="prov" class="col-md-4 col-form-label text-md-right">{{ __('Provinsi') }}</label>

  <div class="col-md-6">
    <select name="prov" class="form-control">
        <option value="">=== Choose Province ===</option>
          @foreach ($prov as $key=>$value)                               
             <option value="{{$key}}">{{$value}}</option>                                    
          @endforeach
      </select>
       </div>
        </div>
 <div class="form-group row">
   <label for="city" class="col-md-4 col-form-label text-md-right">{{ __('City') }}</label>
  <div class="col-md-6">
   <select name="cities" class="form-control"> </select>
    </div>
     </div>

这是我的 javascript:

<script type="text/javascript">

  $(document).ready(function()
  {
      $('select[name="prov"]').on('change', function() {
          var provID = $(this).val();
          if(provID) {
              $.ajax({
                  url: '/register/cities/'+provID,
                  type: "GET",
                  dataType: "json",
                  success:function(data) {                      
                      $('select[name="cities"]').empty();
                      $.each(data, function(key, value) {
                          $('select[name="cities"]').append('<option value="'+ key +'">'+ value +'</option>');
                      });
                  }
              });
          }else{
              $('select[name="cities"]').empty();
          }
      });
  });

</script>

如果我打开 url /register/cities/(any Province id),我得到了数据 json。

【问题讨论】:

  • 您可以从控制器返回 HTML 内容。只需将其附加到您的城市下拉列表中即可。

标签: javascript php jquery ajax laravel


【解决方案1】:

确保返回的响应在

public function cities($id) { ... }

是 JSON 格式。

为此,请检查浏览器中的网络日志(在 Firefox o Chrome F12 -> Net:XHR -> 响应中)或在成功回调中添加 colsole.log(data)

【讨论】:

  • 我检查了我的 Firefox,得到状态 404。嗯。
  • 不好!但至少我们知道问题出在哪里:) 更改这一行:“url:'/register/cities/'+provID”。给出一个绝对 URL 并验证是否设置了 provID 变量。
  • 在我更改我的网址之后。现在显示的城市菜单 [object Object] 不是城市的名称。
【解决方案2】:

在你看来替换你第二个select

 <select name="cities" class="form-control" id='cities'> </select>

你的第一个选择改变这个

<select name="prov" class="form-control">
  <option value="">=== Choose Province ===</option>
    @foreach ($prov as $key=>$value)                               
        option value="{{$value->id}}">{{$value->name}}</option>                                    
    @endforeach
</select>

控制器中的下一个更改

public function cities($id)
 {
   $city = City::where("id_provinsi",$id)->get()              
   return response()->json(['cities' => $city], 200);
 }

each 里面的ajax 中更改这个

$.each(data.cities, function(key, value) {
 $('#cities').append('<option value="'+ value.id+'">'+ value.name +'</option>');
});

为此更改您的url ajax

 url:"{{ url('/register/cities/') }}/"+provID;

【讨论】:

  • 它不起作用。在我的控制台 chrome 中,显示 myweb/register/cities/2 404 ()
  • error 404 if for no found 验证您是否正确发送参数
  • 我将我的 url 从我的 javascript 更改为我的绝对 url,现在它可以工作了。
【解决方案3】:
public function cities($id)
{
        $city = City::where("id_provinsi","=",$id)
                      ->pluck("city_name","id");

       $html = view('city_list', compact('city'))->render();
        return response()->json([
            'html' => $html             
        ]);

}

city_list.blade.php

<select name="city" class="form-control">
    <option value="">=== Choose City===</option>
  @foreach ($city as $key=>$value)                               
     <option value="{{$key}}">{{$value}}</option>                                    
  @endforeach
</select>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 2012-06-04
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    相关资源
    最近更新 更多