jQuery автозаполнение выбирает раскрывающийся список из проблем JSON

У меня проблема с автоматическим заполнением раскрывающегося списка выбора из данных jQuery/JSON, которые возвращаются из CFC ColdFusion, код ниже:

$(function(){
$("#licences-add").dialog({autoOpen:false,modal:true,title:'Add Licences',height:250,width:380});

});

function openAddLicence(intInstanceID,szName,szDatasourceName){
$.getJSON('/ASPAdmin/billing/handler.cfc?method=ListLicenceTypes&queryformat=column',{szInstanceDatasource:szDatasourceName}, 
    function(data){   
        $.each(data,function(){
            $('<option></option>').val(data.DATA.UUIDLICENCETYPE).text(data.DATA.SZLICENCETYPE).appendTo('#uuidLicenceType');
        });
    });
$("#intInstanceID").attr('value', intInstanceID);
$('span#szInstanceName').text(szName);
$("#licences-add").dialog('open');};

Возвращаемый json:

{"ROWCOUNT":1,"COLUMNS":["UUIDLICENCETYPE","SZLICENCETYPE"],"DATA":{"UUIDLICENCETYPE":["480CE560-BCD3-C7AC-AF50B3C71BBCC473"],"SZLICENCETYPE":["Standard"]}}

Однако я получаю следующую ошибку:

$("").val(this.UUIDLICENCETYPE).текст не является функцией

Любые идеи?

HTML:

<tr>
<td><label for="uuidLicenceType" title="Select the licence type (required).">Licence Type</label> <span class="req">*</span></td>
<td>
    <select name="uuidLicenceType" id="uuidLicenceType" class="bmSelect">
        <option value=""></option>
    </select>
</td>
</tr>

person Jon Joyce    schedule 19.04.2010    source источник


Ответы (1)


Поскольку возвращаемый вами JSON не является массивом, вам просто нужно это:

function(data){
  var select = $('#uuidLicenceType');
  $('<option />', {
    val: data.DATA.UUIDLICENCETYPE,
    text: data.DATA.SZLICENCETYPE[0]
  }).appendTo(select);
}

$.each(), который вызывает текущий код, зацикливается на свойствах объекта... чтобы увидеть это, просто поместите alert(this) в цикл, чтобы внутри цикла он увидел 1, массив столбцов и объект данных в конце. Вы можете увидеть это в демо здесь.

Поскольку вы просто хотите получить доступ к свойствам одного объекта, используйте точечную нотацию выше, чтобы получить к ним прямой доступ. Если вы измените формат и получите их массив, то оберните то, что у меня есть выше, в $.each() и замените data на this внутри этого цикла.

Обновлено для комментариев: ваш SZLICENCETYPE возвращается в виде массива: "SZLICENCETYPE":["Standard"], поэтому вам нужно получить из него первый элемент, используя [0].

person Nick Craver    schedule 19.04.2010
comment
Не получаю сообщение об ошибке для этих изменений, поэтому я предполагаю, что оно работает, однако, похоже, оно не добавляется к выбору... И я получаю эту ошибку из файла jquery.min.js: G не определено [Перерыв на эту ошибку ] (function(){var l=this,g,y=l.jQuery,p=...ch(function(){o.dequeue(this,E)})}}); - person Jon Joyce; 19.04.2010
comment
@Jonathon - Можете ли вы опубликовать html-раздел, содержащий ваш <select> ? - person Nick Craver; 19.04.2010
comment
Добавлен HTML в описание вопроса и обновленный jquery... Форма находится в скрытом div, который открывается диалоговым окном пользовательского интерфейса jquery, если это имеет значение? - person Jon Joyce; 19.04.2010
comment
@Jonathon - обновлен ответ, важное изменение: SZLICENCETYPE должно быть SZLICENCETYPE[0] при назначении текста опции. Кроме того, похоже, что вы все еще используете каждый, убедитесь, что вы не возвращаете массив этих элементов :) - person Nick Craver; 19.04.2010