Как узнать, что поступил JSON запрос на PHP?
<?php
if (! empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
  print "Поступил Ajax-запрос";
}
@dpr дал неплохой совет, но если так уж хочется скрыть кухню от пользователя, то почему бы не воспользоваться встроенными в протокол HTTP возможностями?
На стороне клиентаxmlhttp.setRequestHeader('Accept', 'application/json');
На стороне сервераif ($_SERVER['HTTP_ACCEPT'] == 'application/json') {
    // тут генерируем JSON
} else {
    // тут генерируем HTML
}
Использование HTTP-заголовка Accept предпочтительнее, чем HTTP_X_REQUESTED_WITH, потому чтовы точно знаете, что передали заголовок ручками, а не полагаетесь на разработчиков браузера,используете более старую и устоявшюся (но не устаревшую) возможность, встроенную в протокол,оставляете себе задел на использование других представлений, например, XML, CVS, Plain text и т. д.