我正在使用fancybox插件加载页面并执行一些代码。问题在于,有时人们总是有机会在页面完全加载之前点击意图在fancybox窗口中打开的链接,并且设置了fancybox插件,打开页面看起来在完整的浏览器窗口中搞砸了。有没有办法判断HTTP请求是否是通过ajax,所以我可以相应地设置我的布局。
我正在使用zend框架并定义了两个布局,一个用于使用fancybox打开的页面,另一个是常规页面布局。
答案 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,它也会禁用布局等。