Здравствуйте уважаемые! Вот изобретаю велосипед по быстрому поиску пользователями среди своих друзей в чате. Есть такой код:
<div class="friend-header"><input id="search_input" class="friend-search" type="text" placeholder="Поиск друзей..." onkeyup="friend_search(this.value);" maxlength="100" autocomplete="off"><div id="search_button"><i class="icon-search cursor-hand" onclick="$(" .friend-search").focus();"=""></i></div></div>
function friend_search(query) {
var ajax_timeout;
var obj_search_user_list = $("#search_user_list");
if(query.length == 0) {
obj_search_user_list.hide();
$("#user_list").show();
$("#search_button").empty();
$("#search_button").prepend('<i class="icon-search cursor-hand" onclick="$(".friend-search").focus();"></i>');
obj.find('#user_list > .select_user').prependTo($('#user_list'));
$(".scroll_bar").customScrollbar("resize", true);
show_chat();
//clearTimeout(ajax_timeout_search);
//clearTimeout(ajax_timeout);
//ajax_timeout.abort();
//ajax_timeout_search.abort();
return false;
}
$("#search_button").empty();
$("#search_button").prepend("<div class='loading-search'></div>");
ajax_timeout = setTimeout(function() {
var ajaxurl = CHAT_SITE_URL+'/index.php?act=web_chat&op=search_friend&n=99&f_id='+user['u_id']+'&q='+query;
$.ajax({
type: "GET",
url: ajaxurl,
dataType:"jsonp",
async: false,
cache: false,
success: function(friend_list){
obj_search_user_list.empty();
$("#search_button").empty();
$("#search_button").prepend('<div class="clear-search"></div>');
for (var u_id in friend_list){
var class_html = 'offline';
if ( user_list[u_id]['online'] > 0 ) class_html = 'online';
obj_search_user_list.prepend('<li class="user" select_u_id="'+u_id+'" onclick="show_message('+u_id+');"><i class="'+class_html+'"></i><span class="user-avatar avatar-'+user_list[u_id]['online']+'" title="'+user_list[u_id]['u_name']+'"><img alt="'+user_list[u_id]['u_name']+'" src="'+user_list[u_id]['avatar']+'"></span><span class="user-name" title="'+user_list[u_id]['u_name']+'">'+user_list[u_id]['u_name']+'<em></em></span><em unread_id="'+u_id+'" class=""></em></li>');
}
},
complete: function() {
$("#user_list").hide();
obj_search_user_list.show();
//getconnect();
$(".loading-search").remove();
$(".scroll_bar").customScrollbar("resize", true);
}
});
}, 500);
}
public function search_friendOp() {
$model_chat = Model('web_chat');
$f_id = intval($_GET['f_id']);
$n = intval($_GET['n']);
$member_list = $model_chat->getFriendList(array('friend_frommid'=> $f_id, 'friend_tomname' => array('like','%'.trim($_GET['q']).'%')),$n,$member_list);
$this->json($member_list);
}
Подскажите как можно улучшить данный код, в плане нагрузки на базу.
И еще интересует как сделать запуск функции только когда пользователь ввел последнюю букву и остановился, а то сейчас при каждой введенной буквы запрос отправляется. И еще как сделать что бы при удалении символов из поля поиска до 0 скрипт не выполнялся, а то быстро удалишь и запрос все равно выполняется. Заранее благодарен!