2011-12-19 55 views
1

當返回的JSON是一個數組時,jQuery UI自動完成(下面的代碼)工作得很好。但是我返回的JSON是一個包含數組的對象。所以,而不是Rows[]它是Object.Rows[]帶自定義JSON對象的jQuery UI自動完成

我似乎無法得到正確的下面的語法。我原以爲項目會切換到item.Rows,但這似乎不起作用。幫助

$('#reportingLocationLookup').autocomplete({ 
    minLength: 3, 
    delay: 1000, //milliseconds, 
    source: function (request, response) { 
     var dto = { 'term': request.term, 'take': 10 }; 
     //Ajax 
     var urlMethod = window.siteRoot + "Invoices/ListPostalLocations"; 
     var jsonData = JSON.stringify(dto); 
     window.SendAjax(urlMethod, jsonData, response); 
    }, 
    focus: function() { 
     return false; 
    }, 
    select: function (event, ui) { 
     return false; 
    } 
}).data("autocomplete")._renderItem = function (ul, item) { 
    return $("<li></li>") 
    .data("item.autocomplete", item) 
    .append("<a>" + item.PostalCode + " - " + item.CityAlias + ", " + item.StateAbbreviation + "</a>").appendTo(ul); 
}; 
+0

我想你沒有格式化你的代碼,缺少一些東西。 – 2011-12-19 16:15:03

+0

所有的代碼都在那裏。我在其他地方使用這個代碼,當item是一個根數組時,它工作得很好。但是,當數組離開根時,它不喜歡它。 – Mark 2011-12-19 16:19:16

+0

我沒有顯示SendAjax方法,但它工作正常。 – Mark 2011-12-19 16:20:37

回答

4

自動完成插件期望一個Array要被提供給所述response功能。這意味着,你將不得不調整您的通話SendAjaxsuccess說法:

/* snip */ 
source: function (request, response) { 
    var dto = { 'term': request.term, 'take': 10 }; 
    //Ajax 
    var urlMethod = window.siteRoot + "Invoices/ListPostalLocations"; 
    var jsonData = JSON.stringify(dto); 
    window.SendAjax(urlMethod, jsonData, function(data) { 
     response(data.Rows); 
    }); 
}, 
/* snip */ 

基本上,發送response(自動完成的提供的回調函數)數組中的響應對象。