Используйте сочетание согласования содержимого и кэширования, например,
Controller
Action
// check if query is cached
if(!Cache->hasSaved(Query))
Result = Query->run
Cache->save(Result)
else
Result = Cache->getSaved(Query)
// check if Request was done via Ajax
if(Request->isAjax)
View->disableLayout
View->set(JSON->encode(Result))
else
View->set(Result)
Как и Игнасио объяснил , каждый запрос к серверу изолирован. PHP имеет архитектуру без общего доступа , поэтому единственное, что вы можете сделать, чтобы предотвратить повторный запуск запроса, - это кэшировать его. Согласование содержимого просто помогает использовать один и тот же запрос и возвращать его в зависимости от контекста запроса, поэтому у вас нет действия контроллера для Ajax и действия для обычных вызовов.