我正在使用fancybox插件来加载页面并执行一些代码。问题是,有时候总会有人点击一个链接,这个链接意味着在页面加载完毕之前打开一个fancybox窗口,并且fancybox插件被设置为在完整的浏览器窗口中打开页面。有没有办法告诉HTTP请求是否通过ajax,所以我可以相应地设置我的布局。使用fancybox - 如何判断HTTP请求是否是AJAX?
我使用Zend框架,并定义了两个布局一个页面打开用的fancybox,一个是普通的页面布局。
我正在使用fancybox插件来加载页面并执行一些代码。问题是,有时候总会有人点击一个链接,这个链接意味着在页面加载完毕之前打开一个fancybox窗口,并且fancybox插件被设置为在完整的浏览器窗口中打开页面。有没有办法告诉HTTP请求是否通过ajax,所以我可以相应地设置我的布局。使用fancybox - 如何判断HTTP请求是否是AJAX?
我使用Zend框架,并定义了两个布局一个页面打开用的fancybox,一个是普通的页面布局。
在您的操作中,您可以使用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
}
}
您可以检查X-Requested-With
标头,它被许多Javascript库设置为XMLHttpRequest
。
如果您需要使用在不同的上下文中的相同的动作,以提供根据结果,你可以使用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;
}
}
使用
但是,只有当'X-要求-With'头设置正确AFAIK参数切换的背景下,JSON ZF的情况下,会照顾到
$this->view->data
转换成JSON你,它也将禁用布局,等等。 – 2011-04-16 13:59:18