Поиск в базе осуществляется по введенному пользователем тексту, откуда у "неизвестного еще для сервера" может оказаться ID?
data: ({'referal':this.value,
'id':this.id}) - с чего это тут появилось и откуда?
Полученное нужно обработать, data, это аргумент функции обработчика, куда он исчез? То что у меня в примере это объявлено как глобальная переменная, так это только для примера, чтобы его можно было запустить для просмотра.
dataType : 'json', //обязательно или если не указывать, то сервер должен передавать соответствующий заголовок
success: function(data){
if(data) { //если найдены совпадения
var ul = $('ul.search_result').empty().show(); //эффекты типа fadeIn() вряд ли уместны здесь
//это и есть добавление в список
$.each(data, function() {
ul.append('<li data-id="' + this.id + '">' + this.city+ '</li>')
});
//а $(".search_result").html(data) при том что data есть объект, это чушь
//о fadeIn() выше сказано
} else {
//действия в случае если не найдено совпадений
}
}