キャッシング付きの jQuery オートコンプリート リモート ソースを使用しています。jQuery UI Web サイトによるデモによると、キャッシング付きのリモート ソースの 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 にコードを追加して、オートコンプリート リストに画像を表示します。http://jsfiddle.net/3zSMG/のような jQuery オートコンプリートで画像を表示するための優れた例がありますが 、キャッシュ部分は含まれていません。
私は試してみましたが、この例をキャッシング 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 要素が null です。