2011-12-19 122 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(自动完成的提供的回调函数)数组中的响应对象。