2010-04-19 17 views
5

Mam problem w odniesieniu do automatycznego wypełniania wybraną listę rozwijaną z jQuery danych/JSON, który jest powrót z ColdFusion CFC, kod jest poniżej:jQuery wypełnione automatycznie wybierz rozwijane od JSON wystawia

$(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 zwrócony jest:

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

Jednak pojawia się następujący błąd:

$("").val(this.UUIDLICENCETYPE).text is not a function

jakieś pomysły?

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> 

Odpowiedz

2

Ponieważ JSON wracasz nie jest tablicą, po prostu trzeba to:

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

$.each() aktualny kod wywołuje jest zapętlenie nad właściwości oject za ... aby to zobaczyć, wystarczy umieścić w pętli alert(this), aby wewnątrz pętli zobaczyła się 1, tablica kolumn i obiekt danych na końcu. You can see this in a demo here.

Ponieważ chcesz uzyskać dostęp do właściwości tylko jednego obiektu, użyj powyższej notacji kropkowej, aby uzyskać bezpośredni dostęp do nich. Jeśli zmienisz format i uzyskasz ich tablicę, zapakuj to, co mam powyżej w $.each() i zamień data w tę pętlę.

Aktualizacja dla komentarzach: Twój SZLICENCETYPE są zwracane jako tablica: "SZLICENCETYPE":["Standard"], więc trzeba pobrać pierwszy element z niego za pomocą [0].

+0

Nie otrzymuję błąd dla tych zmian, tak myślę swoją pracę, jednak nie robi wydaje się być dołączenie do wybierz ... a ja otrzymuję ten błąd z pliku jquery.min.js: G undefined [Przerwij ten błąd] (function() {var l = this, g, y = l.jQuery, p = ... ch (function() {o.dequeue (this, E)})}}) ; –

+0

@ Jonaton - Czy możesz umieścić sekcję html zawierającą '