我正在使用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