检查请求是否是由Ajax发送的

ily*_*oli 11 ajax magento

我正在重写magento控制器,在处理之前,有没有办法知道请求是否是由Ajax发送的?

谢谢

Jür*_*len 32

Magento将该类Zend_Controller_Request_Http用于其请求.

您可以使用

if ($this->getRequest()->isXmlHttpRequest()) {
    // is Ajax request
}
Run Code Online (Sandbox Code Playgroud)

以这种方式检测Ajax请求.

至少

  • 原型
  • Scriptaculous的
  • jQuery的
  • YUI
  • MochiKit

HTTP_X_REQUESTED_WITH根据ZF文档发送标题.

但请注意,"Ajax请求"是指使用XmlHttpRequest发送的请求(而不是使用隐藏的<iframe>s或Flash上​​传等技术).

由于这是主观的,你的感知可能会有所不同:Magento本身似乎比我更加扩展地定义了"Ajax".看看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;
}
Run Code Online (Sandbox Code Playgroud)

根据您对"Ajax"的个人看法,这可能(或可能不)更符合您的需求.


Dmi*_*sev 10

如果我没有弄错,magento是使用Zend Framework编写的,因此可以使用Request对象

if($this->getRequest()->isXmlHttpRequest()){
    // ajax
} else {
    // not ajax
}
Run Code Online (Sandbox Code Playgroud)

http://framework.zend.com/manual/en/zend.controller.request.html#zend.controller.request.http.ajax

祝好运!:)


ily*_*oli 0

你可以使用这个:

if ($this->getRequest()->getParam('ajax')){
    //Ajax related code
} else {
    //Non ajax
}
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,这是错误的。尽管 Magento 的一些管理控制器_do_提交了一个“ajax”参数及其表单(有时是一个“isAjax”参数),但也有许多 Magento 控制器(例如 checkout)不这样做。即使是这样,现有的参数“ajax”也*不会*告诉任何有关请求是否是使用 Ajax 发送的信息。任何形式的简单 `&lt;input name="ajax" value="1" /&gt;` 也将匹配您提交时的 `if` 条件。即使这样的表单是通过 POST 提交的。检查“HTTP_X_REQUESTED_WITH”标头会告诉您更可靠。 (3认同)