使用fancybox - 如何判断HTTP请求是否为AJAX?

时间:2011-04-16 08:21:40

标签: ajax zend-framework

我正在使用fancybox插件加载页面并执行一些代码。问题在于,有时人们总是有机会在页面完全加载之前点击意图在fancybox窗口中打开的链接,并且设置了fancybox插件,打开页面看起来在完整的浏览器窗口中搞砸了。有没有办法判断HTTP请求是否是通过ajax,所以我可以相应地设置我的布局。

我正在使用zend框架并定义了两个布局,一个用于使用fancybox打开的页面,另一个是常规页面布局。

3 个答案:

答案 0 :(得分:5)

在您的操作中,您可以使用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
    }
}

答案 1 :(得分:0)

您可以查看X-Requested-With标头,该标头由许多Javascript库设置为XMLHttpRequest

答案 2 :(得分:0)

如果您需要在不同的上下文中使用相同的操作来提供相应的结果,您可以使用contextSwitcher() action helper(或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,它也会禁用布局等。