【问题标题】:laravel 4.2 get data from Object in json response to populate dropdownlaravel 4.2 从 json 响应中的对象获取数据以填充下拉列表
【发布时间】:2017-01-01 12:28:00
【问题描述】:

你好,所以我有两个下拉列表,第一个包含我的主要类别,第二个包含基于所选主要类别的子类别,为此我尝试使用 ajax 和 json。在我看来这里是下拉列表的代码

<div class="input-field col s10 offset-s1" style="margin-top:40px;">
    <h6>Main Categories</h6>
    <select name="category" id="category">
        @foreach($mCategories as $list)
            <option value="{{$list->maincategoryid}}">{{$list->maincategoryname}}</option>
        @endforeach
    </select>
</div>
<div class="input-field col s10 offset-s1" style="margin-top:40px;">
    <h6>Sub Categories</h6>
    <select name="subcategory" id="subcategory">
        <option value=""></option>
    </select>
</div>

<script>

    $('#category').on('change' , function(e){
        console.log(e);

        var cat_id = e.target.value;

        //ajax
        $.get('ajax-subcat?cat_id=' + cat_id , function(data){
            console.log(data);

            $('#subcategory').empty();

            $.each(data, function(index, subcatObj)
            {
              $('#subcategory').append('<option value="' + subcatObj.Object.subcategoryid +'">' + subcatObj.subcategoryname +'</option>');
            });

        });
    });

</script>

我还包含了每当“主类别”下拉列表更改时调用 ajax 的脚本。该 ajax 的代码在我的路由中,看起来像这样

Route::get('ajax-subcat' ,function()
{
$cat_id = Input::get('cat_id');
$subcategories = DB::table('nsa_subcategory')
                ->where('maincategoryid' , '=' , $cat_id)
                ->get();
return Response::json($subcategories);

});

基本上,它只是根据用户选择的主要类别返回子类别。回到我的观点,当用户更改主类别的值时,我的控制台中的 json 响应是这样的,

这些数据实际上是正确的。我想要做的是访问对象以获取 subcategoryid 和 subcategoryname 然后将其显示在下拉列表中。但到目前为止,在我看来,我的代码无法填充子类别下拉列表。任何想法我的代码做错了什么?感谢您的帮助

【问题讨论】:

  • 你在数据变量中有什么?
  • 我根据用户在主类别下拉列表中的输入获取对象。你可以看到它附带的图像。谢谢!

标签: php json ajax laravel laravel-4


【解决方案1】:

像这样更改控制器 JSON 响应。

 Route::get('ajax-subcat' ,function()
  {
    $cat_id = Input::get('cat_id');
    $subcategories = DB::table('nsa_subcategory')
            ->where('maincategoryid' , '=' , $cat_id)
            ->get();

    return Response::json(array('result' => true,'data' => $subcategories),200)->setCallback(Input::get('callback'));
  });

按以下方式更改您的 JS

 <script>

$('#category').on('change' , function(e){
    console.log(e);

    var cat_id = e.target.value;

    //ajax
    $.get('ajax-subcat?cat_id=' + cat_id , function(data){
        console.log(data);

        $('#subcategory').empty();

        $.each(data.data.subcategories, function(index, subcatObj)
        {
          $('#subcategory').append('<option value="' + subcatObj.subcategoryid +'">' + subcatObj.subcategoryname +'</option>');
        });

    });
});

【讨论】:

  • 嗨,我在 json 响应中似乎有问题,说 syntax error, unexpected ','
  • @BourneShady 问题是 $subcategories 之后的附加右括号我已经编辑了答案,现在试试
  • 试过但仍然无法填充下拉列表:|顺便说一句,您在 json 响应中忘记了 }); 标签
  • @BourneShady 尝试使用 $('#subcategory') .find('option') .remove();而是 $('#subcategory').empty();
  • 嗨,我这样做了,但输出相同。我在$.each 中添加了一个alert(),但它没有被触发?
【解决方案2】:

尝试改变

 $.each(data, function(index, subcatObj) {
     $('#subcategory').append('<option value="' + subcatObj.Object.subcategoryid +'">' + subcatObj.subcategoryname +'</option>');
 });

for(var i = 0; i < data.length; i++) {
    $('<option value="' + data[i].subcategoryid + '">' + data[i].subcategoryname + '</option>').appendTo("#subcategory");
}

$.get();

$.getJSON();

【讨论】:

  • 您好,感谢您的回答!我这样做了,但它无法填充下拉列表?有什么想法吗?
  • 页面上还有其他#subcategory吗?一个 ID 只允许在一个页面中使用一次,所以请检查一下。代码似乎正确。
  • @BourneShady 我已经添加了一些更改尝试看看你是否得到了你想要的输出
  • @TahaPaksu 我应该删除我的#subcategory 中的&lt;option&gt;&lt;/option&gt; 吗?
  • $("#subcategory").empty() 这样做。如果你愿意,你可以在那里写“请先选择一个类别”。
猜你喜欢
  • 2018-12-30
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
相关资源
最近更新 更多