我正在使用带有缓存的 jQuery 自动完成远程源。根据 jQUery UI 网站的演示,带有缓存的远程源 javascript 是
<script>
$(function() {
    var cache = {},
        lastXhr;
    $( "#birds" ).autocomplete({
        minLength: 2,
        source: function( request, response ) {
            var term = request.term;
            if ( term in cache ) {
                response( cache[ term ] );
                return;
            }
            lastXhr = $.getJSON( "search.php", request, function( data, status, xhr ) {
                cache[ term ] = data;
                if ( xhr === lastXhr ) {
                    response( data );
                }
            });
        }
    });
});
</script>
现在我想在上面的 javascript 中添加一些代码以在自动完成列表中显示图像。在 jQuery 自动完成中显示图像有一个很好的示例,例如:http: //jsfiddle.net/3zSMG/,但它不包括缓存部分。
我一直在尝试但无法将此示例集成到现有的带有缓存 javascript 的遥控器中。任何帮助将不胜感激。非常感谢。
跟进:根据 Andrew Whitaker 的建议,我已将脚本更新如下:
<script>
$(function() {
    var cache = {},
        lastXhr;
    $( "#birds" ).autocomplete({
        minLength: 2,
        source: function( request, response ) {
            var term = request.term;
            if ( term in cache ) {
                response(cache[term]);
                return;
            }
            lastXhr = $.getJSON( "search.php", request, function( data, status, xhr ) {
                var results;
                if ( xhr === lastXhr ) {
                    results = $.map(data, function(item) {
                        return {
                        value: item.value,
                        avatar: item.avatar
                        };
                    });
                    cache[term] = results;
                    response(results);
                }                   
            });
        },
    }).data("autocomplete")._renderItem = function (ul, item) {
    if ( item.value != null ) {
        if ( item.avatar != null) {
            return $("<li/>")
                .data("item.autocomplete", item)
                .append("<a><img src='images/" + item.avatar + "' />" + item.value + "</a>")
                .appendTo(ul);
            }
        else {
            return $("<li/>")
                .data("item.autocomplete", item)
                .append("<a>" + item.value + "</a>")
                .appendTo(ul);
        }
    }
    }; 
});
和search.php的内容:
<?php
require_once "config.php";
$term = trim(strip_tags($_GET['term']));//retrieve the search term that autocomplete sends
$qstring = "select id, subject as value, avatar from Suggests where subject LIKE '%".$term."%'";
$result = mysql_query($qstring);//query the database for entries containing the term
while ($row = mysql_fetch_array($result,MYSQL_ASSOC))//loop through the retrieved values
{
    $row['value']=htmlentities(stripslashes($row['value']));
    $row['id']=(int)$row['id'];
    $row['avatar']=$row['avatar'];
    $row_set[] = $row;//build an array
}
echo json_encode($row_set);//format the array into json data
?>
我能够在自动完成列表中看到图像。但是有一个问题:键入几个字母后,会显示自动完成列表,如果我继续添加更多随机字母以期望自动完成列表消失(因为用户输入不再匹配)但它没有。安德鲁的例子效果很好。我的javascript有什么问题吗?尝试通过 Firebug 进行调试,我收到错误:TypeError 元素为空。
