Зачем href="id1", просто цифры (если нет иных параметров запроса в url, иначе лучше использовать data для задания id), да и в случае, если url будет содержать иные цифры кроме указанных в href ссылок, то номер id будет неверным.
<li><a href="1">Товары для отдыха</a></li>
<li><a href="2">Товары для дома</a></li>
<li><a href="3">Специальные ножи</a></li>
<li><a href="4">Детские санки</a></li>
Метод .leve() устарел, да и этот метод для динамически создаваемых элементов, если список UL со ссылками всегда на странице, то он не нужен и достаточно .click(). Иначе метод .on() с делегированием обработки события onclick ближайшему родителю гарантировано присутствующему на странице.
$('.container a').click(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: "ajax.php",
data:"id="+this.href.split('/').pop(),
success: function(data) {
$('#container2').hide().html(data).fadeIn(200);
}
});
});
Зачем повторять такое же $('#container2') не понятно, нужно все привести к одному обработчику.
На стороне сервера так:
а) если ajax.php обрабатывает только эти запросы по параметру id, то не надо никаких isset($_POST['id']), а нужно проверять истинность параметра, ибо работа этого скрипта начнется только именно по POST запросу. Кроме того, даже если поступать так, то уже не if(isset($inter)), а if($inter).
б) если ajax.php обрабатывает различные запросы по различным ключам, то нужно определять имя ключа, тут уже можно и isset($_POST['id']), и switch по ключам, и т.п...
Если а), то:
if($id = (int)$_POST['id']) {
//запрос к базе
//только что может дать
printf ("%s",$q['links']);
//кроме самих значений полей для html, конечно, если база не хранит html-кода
} //иначе параметр не id