2012-06-06 18 views

Respuesta

0

Se puede utilizar esta:

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

Lo siento, eso está mal. Aunque algunos administradores de Magento _do_ envían un parámetro 'ajax' con sus formularios (y algunas veces un parámetro' isAjax'), también hay muchos controladores de Magento (por ejemplo, pago) que no hacen esto. E incluso si es así, un param 'ajax' existente * no * dice nada sobre si la solicitud fue enviada usando Ajax. Tener un simple '' en cualquier forma también coincidiría con su condición 'if' en el envío. Incluso si dicho formulario es enviado por POST. La comprobación de los encabezados 'HTTP_X_REQUESTED_WITH' le indica que es más confiable. –

+0

En realidad, esta es la manera correcta, algunos widgets de Magento usan IFrames y añaden el parámetro ajax, por lo que comprobar que HTTP_X_REQUESTED_WITH sea inútil ... – skafandri

+1

Creo que eso depende de cómo definas "Ajax". Para mí, solo son XmlHttpRequests. Para ti, es solo un parametro 'ajax'. Para Magento, parece ser ambas ^^ Actualicé mi respuesta para reflejar esto. –

0

sólo tiene que utilizar PHP puro y nunca se preocupan:

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

Nunca entenderé a esas personas que usan marcos diferentes como ZFW, Magentoo, etc. para este propósito, U siempre debería recordar una sintaxis diferente para eso - ¿POR QUÉ? - Solo use una línea de código y se ejecutará (más rápido, más seguro) en todas partes =) –

+1

Yo los uso para evitar el código redundante. –

+0

La redundancia es más bien partes de FrameWork) Wrappers, objetos de escritura perezosos, herencia múltiple todo esto por una sola llamada '$ this-> getRequest() -> getParam ('ajax')' - imagina cuántos códigos se ejecutan cada vez que los usuarios ejecutan diferentes partes de Su aplicación: hay una lógica para determinar si es ajax o algo más, instancia de getRequest() (Objeto Solicitudes) y así sucesivamente ... solo para esta funcionalidad 'return (boolean) ((isset ($ _ SERVER) ['HTTP_X_REQUESTED_WITH'])) && ($ _SERVER ['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')); ' –

28

Magento utiliza la clase Zend_Controller_Request_Http para sus solicitudes.

Puede utilizar

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

para detectar peticiones Ajax de esta manera.

Al menos

  • Prototype
  • Scriptaculous
  • jQuery
  • YUI
  • MochiKit

enviar la cabecera HTTP_X_REQUESTED_WITH, según la ZF docs.

Nota sin embargo, "Ajax" se refiere a las solicitudes de las solicitudes enviadas a través de XmlHttpRequest (y no utilizando técnicas como ocultos s, cargadores o Flash, o similares) a mí.

Dado que esto es subjetivo y su percepción puede diferir: Magento en sí parece definir "Ajax" de una manera más extensa que yo. Echar un vistazo a Mage_Core_Controller_Request_Http::isAjax():

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

Dependiendo de su percepción personal del "Ajax", esto puede (o no) un mejor ajuste a sus necesidades.

+1

Para aquellos que necesitan conocer esta información en otro lugar que no sea un controlador (como un observador), puede usar 'Mage :: app() -> getRequest() -> isXmlHttpRequest()' – Meogi

1

Magento internamente utiliza una combinación de ambos.

Zend Framework isXmlHttpRequest() comprueba el encabezado.

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

En algunos casos Magento utiliza isXmlHttpRequest() como en Mage_ImportExport_Adminhtml_ExportController :: getFilterAction()

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

En otros casos se comprueba obtener parámetros como en Mage_Catalog_Product_CompareController :: removeAction()

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

Solicitud Mage_Core_Controller_Request_Http :: isAjax() comprueba ambos

public function isAjax() 

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

Sugeriría utilizar el objeto Request isAjax, ya que comprueba ambos.

Cuestiones relacionadas