13

処理する前に、magento コントローラーをオーバーライドしています。リクエストが Ajax によって送信されたかどうかを知る方法はありますか?

ありがとう

4

6 に答える 6

37

MagentoはZend_Controller_Request_Httpそのリクエストにクラスを使用します。

使用できます

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

この方法でAjaxリクエストを検出します。

少なくとも

  • プロトタイプ
  • Scriptaculous
  • jQuery
  • ゆい
  • MochiKit

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」に対するあなたの個人的な認識に応じて、これはあなたのニーズによりよく合うかもしれません(またはそうでないかもしれません)。

于 2012-06-06T10:00:21.897 に答える
11

間違っていなければ、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

幸運を!:)

于 2012-06-06T09:55:21.730 に答える
2

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 を使用することをお勧めします。

于 2015-09-30T01:40:51.817 に答える
0

あなたはこれを使うことができます:

if ($this->getRequest()->getParam('ajax')){
    //Ajax related code
} else {
    //Non ajax
}
于 2012-06-06T09:54:05.117 に答える
0

純粋な PHP を使用するだけで、気にする必要はありません。

   public function isAjax()
   {
      return (boolean)((isset($_SERVER['HTTP_X_REQUESTED_WITH'])) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'));
   }
于 2012-06-06T09:53:25.393 に答える