処理する前に、magento コントローラーをオーバーライドしています。リクエストが Ajax によって送信されたかどうかを知る方法はありますか?
ありがとう
MagentoはZend_Controller_Request_Http
そのリクエストにクラスを使用します。
使用できます
if ($this->getRequest()->isXmlHttpRequest()) {
// is Ajax request
}
この方法でAjaxリクエストを検出します。
少なくとも
ZFドキュメントHTTP_X_REQUESTED_WITH
に従って、ヘッダーを送信します。
ただし、「Ajaxリクエスト」とは、XmlHttpRequestを使用して(非表示やFlashアップローダーなどの手法を使用せずに)送信されたリクエストを意味します。<iframe>
これは主観的なものであり、あなたの認識は異なる可能性があるため、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;
}
「Ajax」に対するあなたの個人的な認識に応じて、これはあなたのニーズによりよく合うかもしれません(またはそうでないかもしれません)。
間違っていなければ、magento は Zend Framework を使用して記述されているため、 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 Framework の isXmlHttpRequest() はヘッダーをチェックします。
public function isXmlHttpRequest(){
return ($this->getHeader('X_REQUESTED_WITH') == 'XMLHttpRequest');
}
場合によっては、mage は Mage_ImportExport_Adminhtml_ExportController::getFilterAction() のように isXmlHttpRequest() を使用します。
if ($this->getRequest()->isXmlHttpRequest() && $data) {
//code
}
それ以外の場合は、Mage_Catalog_Product_CompareController::removeAction() のように get パラメータをチェックします。
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 を使用することをお勧めします。
あなたはこれを使うことができます:
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'));
}