2011-04-16 84 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; 
    } 
} 

使用​​

相關問題