回答
您可以使用此:
if ($this->getRequest()->getParam('ajax')){
//Ajax related code
} else {
//Non ajax
}
只要使用纯PHP和从不关心:
public function isAjax()
{
return (boolean)((isset($_SERVER['HTTP_X_REQUESTED_WITH'])) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'));
}
我永远不会理解那些使用ZFW,Magentoo等不同框架的人为此目的,U应始终记住不同的语法 - 为什么? - 只需使用一行代码,它将运行(更快,更安全)到处=) –
我为其中一个人使用它们来避免冗余代码。 –
冗余相当于FrameWork部分)包装器,懒惰的loding对象,多重继承所有这一切只需一次调用'$ this-> getRequest() - > getParam('ajax')' - 想象一下,每次用户运行时有多少代码正在执行你的应用程序的不同部分 - 有一个逻辑确定它是否是ajax或其他的东西,getRequest()(请求对象)的实例等...只是为了这个功能'return(boolean)((isset($ _ SERVER ['HTTP_X_REQUESTED_WITH']))&&($ _SERVER ['HTTP_X_REQUESTED_WITH'] =='XMLHttpRequest'));' –
如果林没有错的话,Magento的使用Zend框架,为此以书面形式使用Request对象可以做
if($this->getRequest()->isXmlHttpRequest()){
// ajax
} else {
// not ajax
}
http://framework.zend.com/manual/en/zend.controller.request.html#zend.controller.request.http.ajax
祝你好运! :)
Magento对其请求使用类Zend_Controller_Request_Http
。
您可以使用
if ($this->getRequest()->isXmlHttpRequest()) {
// is Ajax request
}
检测Ajax请求这种方式。
至少
- 原型
- Scriptaculous的
- jQuery的
- 锐
- MochiKit
发送HTTP_X_REQUESTED_WITH
头,根据ZF docs。
不过请注意,“Ajax请求”使用的XmlHttpRequest(并使用技术不喜欢隐藏 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;
}
根据“阿贾克斯”您个人的看法,这可能(也可能不会)更好地满足您的需求。
对于那些需要知道其他信息而不是控制器(如观察者)的人,可以使用'Mage :: app() - > getRequest() - > isXmlHttpRequest() – Meogi
Magento内部使用了两者的混合。
Zend Framework的isXmlHttpRequest()检查标题。
public function isXmlHttpRequest(){
return ($this->getHeader('X_REQUESTED_WITH') == 'XMLHttpRequest');
}
在某些情况下,Magento会用isXmlHttpRequest()像Mage_ImportExport_Adminhtml_ExportController :: getFilterAction()
if ($this->getRequest()->isXmlHttpRequest() && $data) {
//code
}
在其他情况下,它会检查得到的参数就像Mage_Catalog_Product_CompareController :: removeAction()
if (!$this->getRequest()->getParam('isAjax', false)) {
$this->_redirectReferer();
}
请求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;
}
我会建议使用Request对象isAjax,因为它会检查Both。
- 1. 检查是否Ajax请求是空
- 2. 如何检查是否AJAX请求是由浏览器
- 3. Dart如何检查请求是否是ajax请求
- 4. Codeigniter - 检查是否发出GET请求
- 5. 如何检查是否已经使用Jquery发送了ajax请求?
- 6. 是否可以检查是否从IMG标签发出请求?
- 7. 如何检查c#是否从fancybox或普通网页发送请求
- 8. 我应该检查Ajax请求或不
- 9. AJAX请求不发送请求
- 10. Rails检测请求是否为AJAX
- 11. JQuery .ajax不发送请求
- 12. Typehead.js不发送ajax请求
- 13. Ajax请求不被发送
- 14. AJAX不发送请求
- 15. jQuery ajax不发送请求
- 16. 是否有可能检查用户是否在线而不使用ajax请求?
- 17. 如何检查请求是否是Ajax或代码隐藏 - ASP.NET Webforms
- 18. 如何使用jQuery检查ajax请求是否完成并再次发送新请求?
- 19. 发送ajax请求
- 20. 发送Ajax请求
- 21. 和的NodeJS快递:检查是否请求是CSS或JavaScript
- 22. __doPostBack()是否可能发送GET请求?
- 23. 检查您的页面是不是通过ajax请求?
- 24. Ajax请求是否保证按发送顺序返回?
- 25. 是否AJAX 2.0 +仍然发送完整的回复请求
- 26. 如何从ManagedBean重定向到发送请求是否为Ajax请求?
- 27. 检查Web API请求是否完成
- 28. Umbraco - 检查请求是否为XmlHttpRequest
- 29. 检查Ajax请求
- 30. 由jquery检测ajax请求
对不起,这是错误的。尽管Magento的某些管理员控制器提交了一个带有表单的'ajax'参数(有时候是一个'isAjax'参数),但也有许多Magento控制器(例如checkout)不会这样做。即使如此,现有的参数'ajax'也不能*告诉任何有关请求是否使用Ajax发送的信息。有一个简单的''在任何形式下都可以匹配您提交时的if条件。即使这种表格是由POST提交的。检查HTTP_X_REQUESTED_WITH标头可以让你更加可靠。 –
实际上,这是正确的方式,一些Magento小部件使用IFrames,并附加ajax参数,因此检查HTTP_X_REQUESTED_WITH是无用的。 – skafandri
我认为这取决于您如何定义“Ajax”。对我来说,这只是XmlHttpRequests。对你来说,这只是一个'ajax' params。对于Magento它似乎都是^^我更新了我的回答以反映这一点。 –