Использование fancybox - как я могу узнать, является ли HTTP-запрос AJAX или нет? - PullRequest
1 голос
/ 16 апреля 2011

Я использую плагин fancybox для загрузки страницы и выполнения некоторого кода.Проблема в том, что иногда существует вероятность того, что кто-то нажмет на ссылку, которая должна быть открыта в окне fancybox, до полной загрузки страницы и установки плагина fancybox, открывающего страницу, выглядящую испорченной в полном окне браузера.Есть ли способ определить, является ли HTTP-запрос через AJAX или нет, поэтому я могу соответствующим образом настроить свои макеты.

Я использую Zend Framework и определил два макета: один для страниц, открытых с помощью fancybox, и один.это обычный макет страницы.

Ответы [ 3 ]

5 голосов
/ 16 апреля 2011

В ваших действиях вы можете использовать isXmlHttpRequest () метод для обнаружения ajax-запроса. Например, вы можете сделать:

public function onlyajaxAction() {

    if ($this->getRequest()->isXmlHttpRequest()) {
        // handel ajax request.           
    } else {
        // if not an ajax request, e.g. throw an exception or whatever
    }
}
0 голосов
/ 16 апреля 2011

Если вам нужно использовать одно и то же действие в другом контексте, чтобы обеспечить соответствующий результат, вы можете использовать contextSwitcher() помощник действий (или ajaxContext())

<?php
class YourController extends Zend_Controller_Action
{
    public function init ()
    {
        $ajaxContext = $this->_helper->getHelper('AjaxContext');
        $ajaxContext->addActionContext('do-something', 'json')
            ->initContext();
    }

    public function doSomethingAction ()
    {
        // some logic here
        $this->view->data = $data;
    }
}

Используйте параметр ?format=json для переключения контекста, в случае, если JSON ZF позаботится о том, чтобы преобразовать $this->view->data в JSON, он также отключит макет и т. Д.

0 голосов
/ 16 апреля 2011

Вы можете проверить заголовок X-Requested-With, который установлен на XMLHttpRequest многими библиотеками Javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...