2010-04-19 32 views
5

Tôi gặp sự cố liên quan đến ô tô Populating một thả xuống chọn từ jQuery dữ liệu/JSON mà là trở về từ một ColdFusion CFC, mã dưới đây:jQuery tự di chuyển chọn thả xuống từ JSON hành

$(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');}; 

Các json trả lại là:

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

Tuy nhiên tôi nhận được lỗi sau:

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

Bất kỳ ý tưởng?

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> 

Trả lời

2

Kể từ khi JSON bạn đang trở về không phải là một mảng, bạn chỉ cần điều này:

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

Các $.each() mã hiện tại gọi là vòng lặp đối với tài sản của oject ... để thấy điều này chỉ cần đặt alert(this) trong vòng lặp, vì vậy bên trong vòng lặp, nó nhìn thấy 1, mảng cột và đối tượng dữ liệu ở cuối. You can see this in a demo here.

Vì bạn chỉ muốn truy cập các thuộc tính trên một đối tượng duy nhất, hãy sử dụng ký hiệu chấm ở trên để nhận trực tiếp chúng. Nếu bạn thay đổi định dạng và nhận được một mảng, sau đó bọc những gì tôi có ở trên trong một $.each() và thay thế data bằng this bên trong vòng lặp đó.

cập nhật để lấy ý kiến ​​: SZLICENCETYPE của bạn đang được trả về là một mảng: "SZLICENCETYPE":["Standard"], vì vậy bạn cần phải lấy phần tử đầu tiên từ nó bằng cách sử [0].

+0

Không nhận được lỗi cho những thay đổi đó vì vậy tôi đoán nó hoạt động, tuy nhiên nó dường như không phụ thuộc vào lựa chọn ... Và tôi nhận được lỗi này từ tệp jquery.min.js: G là undefined [Phá vỡ lỗi này] (hàm() {var l = this, g, y = l.jQuery, p = ... ch (hàm() {o.dequeue (this, E)})}}) ; –

+0

@Jonathon - Bạn có thể đăng phần html có chứa '