2011-04-16 82 views
1

我正在使用fancybox插件来加载页面并执行一些代码。问题是,有时候总会有人点击一个链接,这个链接意味着在页面加载完毕之前打开一个fancybox窗口,并且fancybox插件被设置为在完整的浏览器窗口中打开页面。有没有办法告诉HTTP请求是否通过ajax,所以我可以相应地设置我的布局。使用fancybox - 如何判断HTTP请求是否是AJAX?

我使用Zend框架,并定义了两个布局一个页面打开用的fancybox,一个是普通的页面布局。

回答

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

但是,只有当'X-要求-With'头设置正确AFAIK参数切换的背景下,JSON ZF的情况下,会照顾到$this->view->data转换成JSON你,它也将禁用布局,等等。 – 2011-04-16 13:59:18

0

您可以检查X-Requested-With标头,它被许多Javascript库设置为XMLHttpRequest

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; 
    } 
} 

使用​​

相关问题