【问题标题】:Show data from an array to a dynamic selectbox (jQuery - AJAX) in Laravel 4在 Laravel 4 中将数组中的数据显示到动态选择框(jQuery - AJAX)
【发布时间】:2014-09-06 17:25:28
【问题描述】:

我正在尝试使用 jQuery 实现一个动态选择框,但我遇到了一些问题... 我有一条“路线”可以访问我的数据库并获取新选择框的数据:

Route::get('contenidos/comboasign/{asignatura_id}', array('uses' => 'ContenidoController@comboAsignBloque'));

我的控制器:

public function comboAsignBloque($asignatura_id)
{
    if(Request::ajax()){
        $bloques = DB::table('bloques')->where('asignatura_id','=', $asignatura_id)->orderBy('nombre', 'asc')->lists('id','nombre');
        return json_encode(array("bloques" => $bloques));
    }
}

而且,在我看来,我有表单和这个 js:

$(document).ready(function(){
     // Obtenemos los datos del selecbox1

     $("#select_asignatura").change(function(e){
        e.preventDefault();

            var asignatura_id = $("#select_asignatura option:selected").val();

            // AJAX request
            $.get('comboasign/'+asignatura_id, function(data){
                // #select_bloque is the select where I want to show my new options
                var select = $('#select_bloque');

                select.empty();

                // select.html(data);

                var optionsarray = data.split(',');

                var seloption = " ";

                $.each(optionsarray, function(i){

                    seloption += '<option value="' + optionsarray[i] + '">' + optionsarray[i] + '</option>';
                    select.append(seloption);
                });

                  });
        });     
     });

我需要在我的“js”中显示新的“selectbox_bloque”中的数据,或者我在控制器中做得不好......如果我将数据设置为正常,我会得到这样的东西:

 {"bloques":{"bloque 1 mate":1,"Bloque 2 de Mate":6}}

我需要将此数组放入我的选择框中,但我不知道如何... 非常感谢任何帮助。

【问题讨论】:

    标签: php jquery ajax arrays laravel


    【解决方案1】:

    你的对象重复是因为这个

    var seloption = " ";
    
    $.each(optionsarray, function(i){
    
        seloption += '<option value="' + optionsarray[i] + '">' + optionsarray[i] + '</option>';
        select.append(seloption);
    

    改成

        var seloption = " ";
    
        $.each(optionsarray, function(i){
    
            seloption += '<option value="' + optionsarray[i] + '">' + optionsarray[i] + '</option>';
        )};
        select.append(seloption);
    

    【讨论】:

      【解决方案2】:

      首先,使用浏览器调试器检查您是否确实从$.get.... 调用中返回了一些数据。

      当您返回 JSON 数据时,您可以使用

      $.getJSON('comboasign/'+asignatura_id, function(data){
      

      这将自动将返回的 JSON 字符串 (data) 转换为 javascript 数据类型,在您使用

      将 PHP 数组转换为 JSON 数据的情况下,这是一个数组
      json_encode(array("bloques" => $bloques));
      

      你也可以通过这样做来使返回的数据更容易访问

      json_encode( $bloques );
      

      【讨论】:

      • 我已经返回了一些数据,正如我在我的问题中所写的,但关键是我不知道如何正确显示它。我试过你的'$.getJSON()'但我没有得到任何回应...... :(
      • 谢谢,但我的问题是我不知道如何在我获得的数组中的每个
      • 我明白了...我的问题出在我的控制器上。我必须像这样创建一个数组(使用foreach): $bloque_id = DB::table('bloques')->where('asignatura_id','=', $asignatura_id)->orderBy('nombre', ' asc')->lists('id','nombre'); foreach ($bloque_id as $key => $value) { $resources[] = array("nombre" => $key, "id" => $value); } $resources_JSON_array = json_encode($resources);返回 $resources_JSON_array;
      • 然后,在我的 'js' 中,我正确调用每个值和文本: $.each(myData, function(i){ seloption += ''; select.append(seloption); });我现在唯一需要解决的是我正在获取一些重复的对象...... :(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多