Как лучше всего внутри контроллера узнать, является ли запрос XMLHTTP или нет (ZF) - PullRequest
1 голос
/ 24 августа 2009

У меня другая логика в действии, зависит, является ли запрос AJAX или нет.
(При входе в AJAX мне не нужно перенаправлять после успешного входа, что, например, невозможно при обычном входе) Как лучше всего проверить заголовки на X-Requested-With: XMLHttpRequest
Есть флаг или что-то?

Ответы [ 4 ]

6 голосов
/ 24 августа 2009

Этот метод работает, проверяя заголовок, который устанавливается почти (если не) всеми основными библиотеками JS, включая jQuery и YUI.

$this->getRequest()->isXmlHttpRequest() //returns true if is XHR

Метод, описанный в smack0007, гарантированно будет точным, но метод, описанный выше, подойдет, если соединение всегда устанавливается библиотекой, которая устанавливает заголовок. Вероятно, он не подходит для публичного API.

3 голосов
/ 24 августа 2009

Нет надежного способа отличить их; браузеры используют одинаковый HTTP-код как для XMLHttpRequest, так и для обычного доступа.

С другой обработкой браузером пользовательских заголовков и потенциальным вмешательством прокси-сервера, я бы не стал доверять заголовку X-Requested-With в любом случае. (И это все, что ищет isXmlHttpRequest.)

Вместо этого я бы использовал параметр (? Ajax = 1) или другой метод, который генерирует уникальный URL, такой как предложение smack.

1 голос
/ 24 августа 2009

Класс Zend_Controller_Request_Http имеет метод isXmlHttpRequest (), который должен сообщать вам, является ли запрос из Javascript (ajax).

(из практики кодирования, но) Вероятно, что-то вроде этого в вашем действии:

if($this->getRequest()->isXmlHttpRequest()){
    //is ajax
}
else{
    //regular request
}
1 голос
/ 24 августа 2009

Обычно я создаю две точки входа для своего приложения: /index.php и /ajax/index.php. Они оба имеют общий загрузчик, но в ajax.php я установил параметр FrontController, чтобы сказать, что этот запрос является ajax-запросом.

Затем я могу просто зарегистрироваться в объекте Request.

if($this->getRequest()->getParam('ajax')) {
    // Ajax request
} else {
    // Normal request
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...