2012-06-06 15 views

cevap

0

Bunu kullanabilirsiniz:

if ($this->getRequest()->getParam('ajax')){ 
    //Ajax related code 
} else { 
    //Non ajax 
} 
+3

Üzgünüm, bu yanlış. Magento _do_'un bazı yönetici denetleyicileri kendi formlarıyla bir "ajax" param (ve bazen de bir "ajax" param) gönderdiyse de, bunu yapmayan birçok Magento denetleyicisi (örneğin, checkout) da vardır. Ve olsa bile, varolan bir param ajax, isteğin Ajax kullanılarak gönderilip gönderilmediğine dair bir şey söylemez *. Basit bir 'e sahip olmak, herhangi bir formda, 'if' durumunuzu da gönderimle eşleştirecektir. Bu form POST tarafından sunulsa bile. 'HTTP_X_REQUESTED_WITH' başlıklarının kontrol edilmesi, daha güvenilir olduğunu gösterir. –

+0

Aslında, bu doğru bir yoldur, bazı Magento widget'ları IFrames kullanır ve ajax parametresini ekler, bu yüzden HTTP_X_REQUESTED_WITH'nin işe yaramaz olduğunu kontrol edin .. – skafandri

+1

Bence “Ajax” ı nasıl tanımladığınıza bağlı. Bana göre, sadece XmlHttpRequests. Senin için sadece bir "ajax" params. Magento için her ikisi de ^^ gibi görünüyor, bunu yansıtmak için cevabımı güncelledim. –

0

Hemen asla saf PHP kullanmak ve bakım:

public function isAjax() 
    { 
     return (boolean)((isset($_SERVER['HTTP_X_REQUESTED_WITH'])) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')); 
    } 
+0

Bu insanlar, ZFW, Magentoo, vb. Gibi farklı çerçeveler kullanan bu insanları asla anlayamayacağım, U her zaman bunun için farklı sözdizimi hatırlamalıdır - NEDEN ?! - Sadece bir kod satırı kullanın ve her yerde = (daha hızlı, daha güvenli) çalıştırılacak =) –

+1

Biri gereksiz koddan kaçınmak için kullanın. –

+0

Redundancy daha çok FrameWork parçalarıdır) Sarmalayıcılar, tembel yerleştirme objeleri, birden fazla kalıtım için tek bir çağrı için bu '$ this-> getRequest() -> getParam ('ajax')' - kullanıcıların her çalıştırıldığında kaç kod çalıştırdığını hayal edin Uygulamanızın farklı bölümleri - ajax veya başka bir şey olup olmadığını belirlemek için bir mantık var, getRequest() (Requests nesnesi) örneği ve bunun gibi ... sadece bu işlevsellik için 'return (boolean) ((isset ($ _ SERVER) ['HTTP_X_REQUESTED_WITH'])) && ($ _SERVER ['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')) –

28

Magento, istekleri için Zend_Controller_Request_Http sınıfını kullanır.

Sen

if ($this->getRequest()->isXmlHttpRequest()) { 
    // is Ajax request 
} 

Ajax isteklerini bu şekilde algılamak için kullanabilirsiniz.

en az

  • Prototip
  • Scriptaculous
  • jQuery
  • YUI
  • MochiKit

ZF docs göre HTTP_X_REQUESTED_WITH başlığını gönderirler.

Not olsa da, "Ajax istekleri" Bana XmlHttpRequest (ve gizli s gibi teknikler kullanılarak değil veya Flash yükleyenlerden veya benzeri) kullanılarak gönderilen istekleri anlamına gelir.

Bu subjektif olduğundan ve algınız farklı olabileceğinden: Magento'nun kendisi “Ajax” ı benden daha uzun bir şekilde tanımlamaktadır. Bu ihtiyaçlarımızı karşılayabilecek (veya olmayabilir) daha iyi, "Ajax" nin kişisel algı bağlı

public function isAjax() 
{ 
    if ($this->isXmlHttpRequest()) { 
     return true; 
    } 
    if ($this->getParam('ajax') || $this->getParam('isAjax')) { 
     return true; 
    } 
    return false; 
} 

: Mage_Core_Controller_Request_Http::isAjax() göz at.

+1

Bu bilgiyi bir denetleyiciden başka bir yerde (gözlemci gibi) bilmesi gerekenler için, 'Mage :: app() -> getRequest() -> isXmlHttpRequest() 'işlevini kullanabilirsiniz. – Meogi

1

Magento dahili olarak her ikisinin bir karışımını kullanır.

Zend Framework'ün isXmlHttpRequest() çek üstbilgisi.magento Mage_ImportExport_Adminhtml_ExportController gibi isXmlHttpRequest() kullanan bazı durumlarda :: getFilterAction() in

public function isXmlHttpRequest(){ 
    return ($this->getHeader('X_REQUESTED_WITH') == 'XMLHttpRequest'); 
} 

Diğer durumlarda

if ($this->getRequest()->isXmlHttpRequest() && $data) { 
    //code 
} 

o Mage_Catalog_Product_CompareController gibi parametreyi almak :: removeAction()

if (!$this->getRequest()->getParam('isAjax', false)) { 
    $this->_redirectReferer(); 
} 
denetler

İstek Mage_Core_Controller_Request_Http :: isAjax() hem

için geçerlidir.
public function isAjax() 

{ 
    if ($this->isXmlHttpRequest()) { 
     return true; 
    } 
    if ($this->getParam('ajax') || $this->getParam('isAjax')) { 
     return true; 
    } 
    return false; 
} 

İstek nesnesini isAjax'ı her ikisini de denetledikçe kullanmanızı öneririm.

İlgili konular