代码之家  ›  专栏  ›  技术社区  ›  Alexandre Elshobokshy

使用PHP选择2 optgroup format

  •  0
  • Alexandre Elshobokshy  · 技术社区  · 6 年前

    我有一个ajax调用,它获取动态数据并将它们放在select2中,如下所示:

    $.ajax({
        type: 'get',
        url: '/api/?stuff='+c,
        dataType: "json",
        success: function (response) {
            // If select2 is already defined, we destroy it and rebuild it with the new data
            if(typeof $(".select2edit").data('select2') !== 'undefined') {
                $(".select2edit").select2('destroy').select2({ data: response, width: '100%', closeOnSelect: false });
            } else {
                $(".select2edit").select2({ data: response, width: '100%', closeOnSelect: false });
            }
        }
    });
    

    我使用PHP创建响应,然后在发送之前将其转换为JSON:

    $old_emplacement = '';
    $results = array();
    $i = -1;
    
    while($array_campaign = tep_db_fetch_array($campaign)){
        if ($array_campaign['name'] != $old_emplacement) {
            $i++;
            $results['results'][$i]['text'] = $array_campaign['name'];
            $old_emplacement = $array_campaign['name'];
            $c = 0;
        }
        $results['results'][$i]['children'][$c]['id'] = $array_campaign['id'];
        $results['results'][$i]['children'][$c]['text'] = $array_campaign['c_name'];
        $c++;
    }
    
    $results['pagination']["more"] = true; 
    

    从而产生以下JSON格式:

    {
      "results": [
        { 
          "text": "Name 1", 
          "children" : [
            {
                "id": 1,
                "text": "Text 1.1"
            },
            {
                "id": 2,
                "text": "Text 1.2"
            }
          ]
        },
        { 
          "text": "Name 2", 
          "children" : [
            {
                "id": 1,
                "text": "Text 2.1"
            },
            {
                "id": 2,
                "text": "Text 2.2"
            }
          ]
        }
      ],
      "paginate": {
        "more": true
      }
    }
    

    我得到一个 No results found. 当选择2时,初始化并加载。我不知道为什么。它的格式是正确的 documentation 正在说并且 other questions 似乎证实了。你知道问题出在哪里吗?

    同样值得注意的是,我的select2在一个表单中,这个表单在一个modal中,这是它的html:

    <select name="xx[]" id="edit-xx" name='xx' class="form-control select2edit" multiple>
    </select> 
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Alexandre Elshobokshy    6 年前

    问题出在PHP代码生成的格式上。我将结果发布在这里,供任何试图使用PHP生成select2 optgroup格式的人参考:

    $old_emplacement = '';
    
    $results = array();
    $i = -1;
    
    while($array_campaign = tep_db_fetch_array($campaign)){
        if ($array_campaign['name'] != $old_emplacement) {
            $i++;
            $results[$i]['text'] = $array_campaign['name'];
            $old_emplacement = $array_campaign['name'];
            $c = 0;
        }
        $results[$i]['children'][$c]['id'] = $array_campaign['id'];
        $results[$i]['children'][$c]['text'] = $array_campaign['c_name'];
        if(in_array($array_campaign['id'], $campaigns_array)) {
            $results[$i]['children'][$c]['selected'] = true;
        }
        $c++;
    }